summary refs log tree commit diff stats
path: root/compiler/wordrecg.nim
Commit message (Collapse)AuthorAgeFilesLines
* Asm syntax pragma (#23119)ASVIEST2023-12-251-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | (Inspired by this pragma in nir asm PR) `inlineAsmSyntax` pragma allowing specify target inline assembler syntax in `asm` stmt. It prevents compiling code with different of the target CC inline asm syntax, i.e. it will not allow gcc inline asm code to be compiled with vcc. ```nim proc nothing() = asm {.inlineAsmSyntax: "gcc".} """ nop """ ``` The current C(C++) backend implementation cannot generate code for gcc and for vcc at the same time. For example, `{.inlineAsmSyntax: "vcc".}` with the ICC compiler will not generate code with intel asm syntax, even though ICC can use both gcc-like asm and vcc-like. For implement support for gcc and for vcc at the same time in ICC compiler, we need to refactor extccomp --------- Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
* prepare for the enforcement of `std` prefix (#22873)ringabout2023-10-291-1/+1
| | | follow up https://github.com/nim-lang/Nim/pull/22851
* fixes #22676; remove wMerge which is a noop for more than 8 years (#22678)ringabout2023-09-091-1/+1
| | | | | | | fixes #22676 If csource or CI forbids it, we can always fall back to adding it to the nonPragmaWords list. I doubt it was used outside of the system since it was used to implement & or something for magics.
* allow non-pragma special words as user pragmas (#22526)metagn2023-08-211-8/+19
| | | | | allow non-pragma special words as macro pragmas fixes #22525
* [C++] Member pragma RFC (https://github.com/nim-lang/RFCs/issues/530) (#22272)Juan M Gómez2023-08-071-1/+1
| | | | | | | | | | * [C++] Member pragma RFC #530 rebase devel * changes the test so `echo` is not used before Nim is init * rebase devel * fixes Error: use explicit initialization of X for clarity [Uninit]
* implemented 'push quirky' switch for fine grained control over the ex… ↵Andreas Rumpf2023-07-231-0/+1
| | | | | | | (#22318) * implemented 'push quirky' switch for fine grained control over the exception handling overhead * documentation
* make runnableExamples a special word (#22024)metagn2023-06-061-1/+1
| | | | | * make runnableExamples a special word * fix imports
* isolation spec update; WIP (#21843)Andreas Rumpf2023-05-141-0/+1
| | | | | | | | | | | * isolation spec update; WIP * wip * docs update, WIP * progress * Update doc/manual.md
* underscore as special word (#21766)metagn2023-05-021-0/+1
| | | | | * underscore as special word * fix really hard to notice error
* remove `enumUtilsExist` defines (#21309)ringabout2023-01-291-17/+4
|
* fixes #20026; marks system procs which can raise defects (#20864)ringabout2022-11-221-1/+1
| | | | | | | | | * marks system procs which can raise defects * add tests * add more systemRaisesDefect * add comment
* pragma for sfCallsite instead of name check + better semantics, test (#20464)metagn2022-10-031-1/+1
| | | | | | | | | | | * pragma for sfCallsite instead of name check at every template definition Not documented because it seems to be for internal use? Should also make it possible to make comparisons and setops imports, but this doesn't have to be done. I can reuse a name like `cursor` for the pragma as well, added a new name just to be safe. * make sfCallsite recursive, add tests
* new .redefine pragma for templates, warn on redefinition without it (#20211)metagn2022-08-231-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * test CI for template redefinitions * adapt asyncmacro * fix quote * fix again * try something else * revert * fix ioselectors_select, disable packages CI * adapt more tests & simplify * more * more * more * rename to redefine, warn on implicit redefinition * basic documentation [skip ci] * Update compiler/lineinfos.nim Co-authored-by: konsumlamm <44230978+konsumlamm@users.noreply.github.com> Co-authored-by: konsumlamm <44230978+konsumlamm@users.noreply.github.com>
* Add `doctype: RST|Markdown|RstMarkdown` pragma (#20252)Andrey Makarov2022-08-231-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | * Add `doctype: RST|Markdown|RstMarkdown` pragma Implements https://github.com/nim-lang/RFCs/issues/68 , see also discussion in https://github.com/nim-lang/Nim/issues/17987 The permitted values: * `markdown`, which is default. It still contains nearly all of the RST supported but it is assumed that in time we will give up most or all RST features in this mode * `rst`, without any extensions * `RstMarkdown` — compatibility with Nim 1.x. It's basically RST with those Markdown features enabled that don't conflict with RST. * Apply suggestions from code review Co-authored-by: Clay Sweetser <Varriount@users.noreply.github.com> * Additional fix in spirit of review * Fix test after #20188 Co-authored-by: Clay Sweetser <Varriount@users.noreply.github.com>
* .forbids pragma: defining forbidden tags (#20050)Lancer112112022-07-261-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * .forbids pragma: defining illegal effects for proc types This patch intends to define the opposite of the .tags pragma: a way to define effects which are not allowed in a proc. * updated documentation and changelogs for the forbids pragma * renamed notTagEffects to forbiddenEffects * corrected issues of forbids pragma the forbids pragma didn't handle simple restrictions properly and it also had issues with subtyping * removed incorrect character from changelog * added test to cover the interaction of methods and the forbids pragma * covering the interaction of the tags and forbids pragmas * updated manual about the forbids pragma * removed useless statement * corrected the subtyping of proc types using the forbids pragma * updated manual for the forbids pragma * updated documentations for forbids pragma * updated nim docs * updated docs with rsttester.nim * regenerated documentation * updated rst docs * Update changelog.md Co-authored-by: ringabout <43030857+ringabout@users.noreply.github.com> * updated changelog * corrected typo Co-authored-by: ringabout <43030857+ringabout@users.noreply.github.com>
* Change `styleCheck` to ignore foreign packages (#19822)quantimnot2022-07-141-7/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * Change `styleCheck` to ignore foreign packages * Symbols from foreign packages are now ignored. * Fixed `styleCheck` violations in `compiler` package. * Added symbol ownership to custom annotation pragmas. * Minor refactors to cleanup style check callsites. * Minor internal documentation of reasons why a symbol isn't checked. Style violations were fixed in the compiler after thet were exposed by the changes. The compiler wouldn't compile otherwise. Symbol ownership for custom pragma annotations is needed for checking the annotation's style. A NPE was raised otherwise. Fixes #10201 See also nim-lang/RFCs#456 * Fix a misunderstanding about excluding field style checks I had refactored the callsites of `styleCheckUse` to apply the DRY principle, but I misunderstood the field access handling in a template as a general case. This corrects it. * Fix some `styleCheck` violations in `compiler/evalffi` The violations were exposed in CI when the compiler was built with libffi. * Removed some uneeded transitionary code * Add changelog entry Co-authored-by: quantimnot <quantimnot@users.noreply.github.com>
* stylecheck usages part two: stdlib cleanup (#19338)flywind2022-01-081-1/+1
| | | | | | | | | | | | | * stylecheck usages part two: stdlib cleanup typeinfo.nim: importCompilerProc => importcompilerproc nre.nim: newLineFlags => newlineFlags system.nim: JSRoot => JsRoot ref #19319 * prefer importCompilerProc
* fixes #19078 [backport] (#19090)Andreas Rumpf2021-11-021-1/+1
|
* Removes deprecated {.injectStmt.}. Fixes #18666 (#18984)Dominik Picheta2021-10-131-1/+1
|
* implements https://github.com/nim-lang/RFCs/issues/407 (#18793)Andreas Rumpf2021-09-031-0/+1
|
* strict effects (#18777)Andreas Rumpf2021-09-021-1/+1
| | | | | | | | | | | | | | | | | * fixes #17369 * megatest is green for --cpu:arm64 * docgen output includes more tags/raises * implemented 'effectsOf' * algorithm.nim: uses new effectsOf annotation * closes #18376 * closes #17475 * closes #13905 * allow effectsOf: [a, b] * added a test case * parameters that are not ours cannot be declared as .effectsOf * documentation * manual: added the 'sort' example * bootstrap with the new better options
* CIs: attempt to use csources_v1 (#16282)Andreas Rumpf2021-04-211-40/+40
| | | | | | | | * CIs: attempt to use csources_v1 * also updated the BSDs * also updated azure pipelines * std modules should not itself use the 'std/' import dir... * compiler has to be careful with std/ for v1 booting
* `import foo {.all.}` reboot (#17706)Timothee Cour2021-04-161-1/+1
|
* fix #16752: threadvar now works with importcpp types; osx now uses native ↵Timothee Cour2021-01-271-1/+2
| | | | | | | | | | | TLS (`--tlsEmulation:off`), which can be orders of magnitude faster (#16750) * osx now uses native TLS, which can be orders of magnitude faster * add {.cppNonPod.} * improve test * changelog, docs, disable part of windows test
* `--hintAsError` (#16763)Timothee Cour2021-01-201-1/+4
| | | | | | | * --hintAsError * add test, changelog * condsyms
* EnumUtils, speed up findStr in compiler (#15777)cooldome2020-11-031-7/+18
| | | | | | | | * add parseEnumRange * fix runnable example * update changelog * use parseEnumRange in compiler * reorganise code * add changelog, make single normalizer argument
* Use modern enums in compiler (#15775)cooldome2020-11-021-148/+95
|
* .noalias annotation; frontend support (#15419)Andreas Rumpf2020-09-281-2/+2
| | | | | * .noalias annotation; frontend support * added .noalias support to Nim; implements https://github.com/nim-lang/RFCs/issues/204
* Big compiler Cleanup (#14777)Clyybber2020-08-281-55/+19
|
* Add thiscall calling convention, mostly for hooking purpose (#14466)Huy Doan2020-05-271-2/+2
| | | | * Add thiscall calling convention, mostly for hooking purpose * add changelog and documentation
* CT sizeof(+friends) for {.importc, completeStruct.} types, enable ABI static ↵Timothee Cour2020-04-231-1/+6
| | | | | | | | | | | checks (#13926) * -d:checkabi obsolete (ABI check now enforced); add `addTypeHeader` helper * cleanups * import sizeof at CT for {.completeType.} * address comments; revert default enabling of -d:checkAbi for now * mimportc_size_check.nim => msizeof5.nim; merge mabi_check.nim into msizeof5.nim; refactor * all pragmas in errmsgs should be written: '.importc' (un-ambiguous and less verbose than {.importc.})
* new feature: ability to turn specific warnings to errorsAndreas Rumpf2020-04-041-2/+3
|
* added an .assert pragma and mentioned the pragmas in the changelogAraq2020-04-021-2/+2
|
* DrNim (Nim compiler with Z3 integration) (#13743)Andreas Rumpf2020-03-311-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | * code cleanups and feature additions * added basic test and koch/CI integration * make it build on Unix * DrNim: now buildable on Unix, only takes 10 minutes, enjoy * added basic documentation for DrNim which can also be seen as the RFC we're following * drnim: change the build setup so that drnim.exe ends up in bin/ * makes simple floating point ranges work * added basic float range check * drnim: teach Z3 about Nim's range types plus code refactoring * drnim: make unsigned numbers work * added and fixed index checking under setLen * first implementation of .ensures, .invariant and .assume (.requires still missing and so is proc type compatibility checking * drnim: .requires checking implemented * drnim: implemented .ensures properly * more impressive test involving min() * drnim: check for proc type compatibility and base method compatibility wrt .requires and .ensures * testament: support for 'pattern <directory> * koch: uses new <directory> feature of testament * drnim: added tiny musings about 'old' * Make testament work with old SSL versions * koch: add support for 'koch drnim -d:release' * drnim: preparations for the param.old notation
* new feature: --staticBoundChecks:on to enforce static array index checking ↵Andreas Rumpf2020-03-181-2/+2
| | | | (#10965)
* sink parameter inference for types that have destructors (#13544)Andreas Rumpf2020-03-041-4/+4
| | | | | | | | | | | | | | * ensure capitalize doesn't take an inferred sink parameter * sink parameter inference: first version, for now disabled. Changed that sink parameters can be consumed multiple times in order to adhere to our spec. * sink inference can now be disabled with .nosinks; sometimes for proc type interop this is required * fixes yet another critical DFA bug * better implementation that also understands if expressions etc * document sink parameter inference and allow for global disabling
* Cosmetic compiler cleanup (#12718)Clyybber2019-11-281-1/+1
| | | | | | | | | | | | | | | | | | * Cleanup compiler code base * Unify add calls * Unify len invocations * Unify range operators * Fix oversight * Remove {.procvar.} pragma * initCandidate -> newCandidate where reasonable * Unify safeLen calls
* implemented a new localPassc pragma (#12706)Andreas Rumpf2019-11-221-2/+3
|
* .cursor implementation (#12637)Andreas Rumpf2019-11-121-2/+2
| | | | | | | | | | | * cursors: first implementation * added currently failing test * .cursor works for doubly linked lists * make -d:useMalloc work again * added code to nil out refs in a destructor * it's now called --gc:arc * renderer.nim: render nkBreakState properly * make simple closure iterators work without leaking
* Refactor injectdestructors (#12295)Clyybber2019-10-011-4/+0
| | | One improvement over #devel is visible in the transformation of getEnv. With this approach we move to result whenever possible.
* fixes #12298Araq2019-09-301-1/+1
|
* importjs symbol (#12218)Arne Döring2019-09-201-2/+2
| | | | | * importjs symbol * importjs warning message, minor warning fixes
* exportc now mangles same as importc, fixes #10578 (#12144)Timothee Cour2019-09-061-2/+2
| | | | | | | * fixes #10578 * add tests * add changelog * add {.exportcpp.}
* Remove ENDB (#12095)Clyybber2019-08-311-5/+3
|
* styleCheck: make the compiler and large parts of the stdlib compatible with ↵Araq2019-07-101-10/+8
| | | | --styleCheck:error
* linter: refactoringsAraq2019-07-101-1/+35
|
* [other] new experimental pragma .nodestroy for easier custom destructorsAndreas Rumpf2019-06-201-2/+2
|
* Replace countup(x, y) with x .. yClyybber2019-05-071-1/+1
|
* more destructor based changes (#10885)Andreas Rumpf2019-03-231-2/+2
| | | | | | | | | | | * mark user defined destructors with sfOverriden to simplify the logic * refactoring in preparation to merge liftings and generic instantiations for destructors * ast: introduce nkHiddenTryStmt for destructor generation in order to be able to optimize better the code later on * renamed 'patterns' switch to 'trmacros' as it was totally misleading before * destructors: introduce tfCheckedForDestructor flag in preparation of strict =destroy checking * test for invalid/too late destructor introductions * liftdestructors: make code robust for nimsuggest * --newruntime works for hello world again * newruntime: code generation for closures
* explicit default values for a leaner codegen, .cursor variables for optimizationAndreas Rumpf2019-03-071-2/+2
|
">>+mem: storing 94 in location 30</span> <span id="L17" class="LineNr"> 17 </span> <span id="L18" class="LineNr"> 18 </span><span class="Delimiter">:(before &quot;End Preprocess read_memory(x)&quot;)</span> <span id="L19" class="LineNr"> 19 </span><a href='035lookup.cc.html#L66'>canonize</a><span class="Delimiter">(</span>x<span class="Delimiter">);</span> <span id="L20" class="LineNr"> 20 </span> <span id="L21" class="LineNr"> 21 </span><span class="Comment">//: similarly, write to addresses pointing at other locations using the</span> <span id="L22" class="LineNr"> 22 </span><span class="Comment">//: 'lookup' property</span> <span id="L23" class="LineNr"> 23 </span><span class="Delimiter">:(scenario store_indirect)</span> <span id="L24" class="LineNr"> 24 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [ <span id="L25" class="LineNr"> 25 </span> <span class="Comment"># skip alloc id for 10:&amp;:num</span> <span id="L26" class="LineNr"> 26 </span> <span class="Constant">11</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">10</span> <span id="L27" class="LineNr"> 27 </span> <span class="Constant">10</span>:&amp;:num/lookup<span class="Special"> &lt;- </span>copy <span class="Constant">94</span> <span id="L28" class="LineNr"> 28 </span>] <span id="L29" class="LineNr"> 29 </span><span class="traceContains">+mem: storing 94 in location 11</span> <span id="L30" class="LineNr"> 30 </span> <span id="L31" class="LineNr"> 31 </span><span class="Delimiter">:(before &quot;End Preprocess write_memory(x, data)&quot;)</span> <span id="L32" class="LineNr"> 32 </span><a href='035lookup.cc.html#L66'>canonize</a><span class="Delimiter">(</span>x<span class="Delimiter">);</span> <span id="L33" class="LineNr"> 33 </span> <span id="L34" class="LineNr"> 34 </span><span class="Comment">//: writes to address 0 always loudly fail</span> <span id="L35" class="LineNr"> 35 </span><span class="Delimiter">:(scenario store_to_0_fails)</span> <span id="L36" class="LineNr"> 36 </span><span class="Special">% Hide_errors = true;</span> <span id="L37" class="LineNr"> 37 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [ <span id="L38" class="LineNr"> 38 </span> <span class="Constant">10</span>:&amp;:num<span class="Special"> &lt;- </span>copy<span class="Constant"> null</span> <span id="L39" class="LineNr"> 39 </span> <span class="Constant">10</span>:&amp;:num/lookup<span class="Special"> &lt;- </span>copy <span class="Constant">94</span> <span id="L40" class="LineNr"> 40 </span>] <span id="L41" class="LineNr"> 41 </span><span class="traceAbsent">-mem: storing 94 in location 0</span> <span id="L42" class="LineNr"> 42 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: tried to lookup 0 in '10:&amp;:num/lookup &lt;- copy 94'</span> <span id="L43" class="LineNr"> 43 </span> <span id="L44" class="LineNr"> 44 </span><span class="Comment">//: attempts to /lookup address 0 always loudly fail</span> <span id="L45" class="LineNr"> 45 </span><span class="Delimiter">:(scenario lookup_0_fails)</span> <span id="L46" class="LineNr"> 46 </span><span class="Special">% Hide_errors = true;</span> <span id="L47" class="LineNr"> 47 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [ <span id="L48" class="LineNr"> 48 </span> <span class="Constant">10</span>:&amp;:num<span class="Special"> &lt;- </span>copy<span class="Constant"> null</span> <span id="L49" class="LineNr"> 49 </span> <span class="Constant">20</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">10</span>:&amp;:num/lookup <span id="L50" class="LineNr"> 50 </span>] <span id="L51" class="LineNr"> 51 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: tried to lookup 0 in '20:num &lt;- copy 10:&amp;:num/lookup'</span> <span id="L52" class="LineNr"> 52 </span> <span id="L53" class="LineNr"> 53 </span><span class="Delimiter">:(scenario lookup_0_dumps_callstack)</span> <span id="L54" class="LineNr"> 54 </span><span class="Special">% Hide_errors = true;</span> <span id="L55" class="LineNr"> 55 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [ <span id="L56" class="LineNr"> 56 </span> foo<span class="Constant"> null</span> <span id="L57" class="LineNr"> 57 </span>] <span id="L58" class="LineNr"> 58 </span><span class="muRecipe">def</span> foo [ <span id="L59" class="LineNr"> 59 </span> <span class="Constant">10</span>:&amp;:num<span class="Special"> &lt;- </span>next-input <span id="L60" class="LineNr"> 60 </span> <span class="Constant">20</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">10</span>:&amp;:num/lookup <span id="L61" class="LineNr"> 61 </span>] <span id="L62" class="LineNr"> 62 </span><span class="traceContains">+error: foo: tried to lookup 0 in '20:num &lt;- copy 10:&amp;:num/lookup'</span> <span id="L63" class="LineNr"> 63 </span><span class="traceContains">+error: called from <a href='000organization.cc.html#L113'>main</a>: foo null</span> <span id="L64" class="LineNr"> 64 </span> <span id="L65" class="LineNr"> 65 </span><span class="Delimiter">:(code)</span> <span id="L66" class="LineNr"> 66 </span><span class="Normal">void</span> <a href='035lookup.cc.html#L66'>canonize</a><span class="Delimiter">(</span>reagent&amp; x<span class="Delimiter">)</span> <span class="Delimiter">{</span> <span id="L67" class="LineNr"> 67 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>is_literal<span class="Delimiter">(</span>x<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Delimiter">;</span> <span id="L68" class="LineNr"> 68 </span> <span class="Comment">// Begin canonize(x) Lookups</span> <span id="L69" class="LineNr"> 69 </span> <span class="Normal">while</span> <span class="Delimiter">(</span>has_property<span class="Delimiter">(</span>x<span class="Delimiter">,</span> <span class="Constant">&quot;lookup&quot;</span><span class="Delimiter">))</span> <span id="L70" class="LineNr"> 70 </span> <a href='035lookup.cc.html#L73'>lookup_memory</a><span class="Delimiter">(</span>x<span class="Delimiter">);</span> <span id="L71" class="LineNr"> 71 </span><span class="Delimiter">}</span> <span id="L72" class="LineNr"> 72 </span> <span id="L73" class="LineNr"> 73 </span><span class="Normal">void</span> <a href='035lookup.cc.html#L73'>lookup_memory</a><span class="Delimiter">(</span>reagent&amp; x<span class="Delimiter">)</span> <span class="Delimiter">{</span> <span id="L74" class="LineNr"> 74 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>!x<span class="Delimiter">.</span>type || x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>atom || x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>value != 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;End Preprocess is_mu_address(reagent r)&quot;)</span> <span id="L130" class="LineNr">130 </span><span class="Normal">if</span> <span class="Delimiter">(</span>!canonize_type<span class="Delimiter">(</span>r<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span> <span id="L131" class="LineNr">131 </span> <span id="L132" class="LineNr">132 </span><span class="Delimiter">:(before &quot;End Preprocess is_mu_number(reagent r)&quot;)</span> <span id="L133" class="LineNr">133 </span><span class="Normal">if</span> <span class="Delimiter">(</span>!canonize_type<span class="Delimiter">(</span>r<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span> <span id="L134" class="LineNr">134 </span><span class="Delimiter">:(before &quot;End Preprocess is_mu_boolean(reagent r)&quot;)</span> <span id="L135" class="LineNr">135 </span><span class="Normal">if</span> <span class="Delimiter">(</span>!canonize_type<span class="Delimiter">(</span>r<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span> <span id="L136" class="LineNr">136 </span><span class="Delimiter">:(before &quot;End Preprocess is_mu_character(reagent r)&quot;)</span> <span id="L137" class="LineNr">137 </span><span class="Normal">if</span> <span class="Delimiter">(</span>!canonize_type<span class="Delimiter">(</span>r<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span> <span id="L138" class="LineNr">138 </span> <span id="L139" class="LineNr">139 </span><span class="Delimiter">:(after &quot;Update product While Type-checking Merge&quot;)</span> <span id="L140" class="LineNr">140 </span><span class="Normal">if</span> <span class="Delimiter">(</span>!canonize_type<span class="Delimiter">(</span>product<span class="Delimiter">))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span> <span id="L141" class="LineNr">141 </span> <span id="L142" class="LineNr">142 </span><span class="Delimiter">:(before &quot;End Compute Call Ingredient&quot;)</span> <span id="L143" class="LineNr">143 </span>canonize_type<span class="Delimiter">(</span>ingredient<span class="Delimiter">);</span> <span id="L144" class="LineNr">144 </span><span class="Delimiter">:(before &quot;End Preprocess NEXT_INGREDIENT product&quot;)</span> <span id="L145" class="LineNr">145 </span>canonize_type<span class="Delimiter">(</span>product<span class="Delimiter">);</span> <span id="L146" class="LineNr">146 </span><span class="Delimiter">:(before &quot;End Check RETURN Copy(lhs, rhs)</span> <span id="L147" class="LineNr">147 </span>canonize_type<span class="Delimiter">(</span>lhs<span class="Delimiter">);</span> <span id="L148" class="LineNr">148 </span>canonize_type<span class="Delimiter">(</span>rhs<span class="Delimiter">);</span> <span id="L149" class="LineNr">149 </span> <span id="L150" class="LineNr">150 </span><span class="Delimiter">:(code)</span> <span id="L151" class="LineNr">151 </span><span class="Normal">bool</span> canonize_type<span class="Delimiter">(</span>reagent&amp; r<span class="Delimiter">)</span> <span class="Delimiter">{</span> <span id="L152" class="LineNr">152 </span> <span class="Normal">while</span> <span class="Delimiter">(</span>has_property<span class="Delimiter">(</span>r<span class="Delimiter">,</span> <span class="Constant">&quot;lookup&quot;</span><span class="Delimiter">))</span> <span class="Delimiter">{</span> <span id="L153" class="LineNr">153 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>!r<span class="Delimiter">.</span>type || r<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>atom || !r<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>left || !r<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>atom || r<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>value != 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="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 new_error)</span> <span id="L260" class="LineNr">260 </span><span class="Special">% Hide_errors = true;</span> <span id="L261" class="LineNr">261 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [ <span id="L262" class="LineNr">262 </span> <span class="Constant">1</span>:num/<span class="Special">raw &lt;- </span><span class="Normal">new</span> <span class="Constant">num:type</span> <span id="L263" class="LineNr">263 </span>] <span id="L264" class="LineNr">264 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: product of 'new' has incorrect type: '1:num/raw &lt;- new num:type'</span> <span id="L265" class="LineNr">265 </span> <span id="L266" class="LineNr">266 </span><span class="Delimiter">:(after &quot;Update NEW product in Check&quot;)</span> <span id="L267" class="LineNr">267 </span>canonize_type<span class="Delimiter">(</span>product<span class="Delimiter">);</span> <span id="L268" class="LineNr">268 </span> <span id="L269" class="LineNr">269 </span><span class="Delimiter">:(scenario copy_array_indirect)</span> <span id="L270" class="LineNr">270 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [ <span id="L271" class="LineNr">271 </span> <span class="Comment"># skip alloc id for 10:&amp;:@:num</span> <span id="L272" class="LineNr">272 </span> <span class="Constant">11</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">20</span> <span id="L273" class="LineNr">273 </span> <span class="Comment"># skip alloc id for payload</span> <span id="L274" class="LineNr">274 </span> <span class="Constant">21</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">3</span> <span class="Comment"># array length</span> <span id="L275" class="LineNr">275 </span> <span class="Constant">22</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">94</span> <span id="L276" class="LineNr">276 </span> <span class="Constant">23</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">95</span> <span id="L277" class="LineNr">277 </span> <span class="Constant">24</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">96</span> <span id="L278" class="LineNr">278 </span> <span class="Constant">30</span>:@:num<span class="Special"> &lt;- </span>copy <span class="Constant">10</span>:&amp;:@:num/lookup <span id="L279" class="LineNr">279 </span>] <span id="L280" class="LineNr">280 </span><span class="traceContains">+mem: storing 3 in location 30</span> <span id="L281" class="LineNr">281 </span><span class="traceContains">+mem: storing 94 in location 31</span> <span id="L282" class="LineNr">282 </span><span class="traceContains">+mem: storing 95 in location 32</span> <span id="L283" class="LineNr">283 </span><span class="traceContains">+mem: storing 96 in location 33</span> <span id="L284" class="LineNr">284 </span> <span id="L285" class="LineNr">285 </span><span class="Delimiter">:(scenario create_array_indirect)</span> <span id="L286" class="LineNr">286 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [ <span id="L287" class="LineNr">287 </span> <span class="Comment"># skip alloc id for 10:&amp;:@:num:3</span> <span id="L288" class="LineNr">288 </span> <span class="Constant">11</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">3000</span> <span id="L289" class="LineNr">289 </span> <span class="Constant">10</span>:&amp;:array:num:<span class="Constant">3</span>/lookup<span class="Special"> &lt;- </span>create-array <span id="L290" class="LineNr">290 </span>] <span id="L291" class="LineNr">291 </span><span class="traceContains">+mem: storing 3 in location 3001</span> <span id="L292" class="LineNr">292 </span> <span id="L293" class="LineNr">293 </span><span class="Delimiter">:(after &quot;Update CREATE_ARRAY product in Check&quot;)</span> <span id="L294" class="LineNr">294 </span><span class="Normal">if</span> <span class="Delimiter">(</span>!canonize_type<span class="Delimiter">(</span>product<span class="Delimiter">))</span> <span class="Identifier">break</span><span class="Delimiter">;</span> <span id="L295" class="LineNr">295 </span><span class="Delimiter">:(after &quot;Update CREATE_ARRAY product in Run&quot;)</span> <span id="L296" class="LineNr">296 </span><a href='035lookup.cc.html#L66'>canonize</a><span class="Delimiter">(</span>product<span class="Delimiter">);</span> <span id="L297" class="LineNr">297 </span> <span id="L298" class="LineNr">298 </span><span class="Delimiter">:(scenario index_indirect)</span> <span id="L299" class="LineNr">299 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [ <span id="L300" class="LineNr">300 </span> <span class="Comment"># skip alloc id for 10:&amp;:@:num</span> <span id="L301" class="LineNr">301 </span> <span class="Constant">11</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">20</span> <span id="L302" class="LineNr">302 </span> <span class="Comment"># skip alloc id for payload</span> <span id="L303" class="LineNr">303 </span> <span class="Constant">21</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">3</span> <span class="Comment"># array length</span> <span id="L304" class="LineNr">304 </span> <span class="Constant">22</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">94</span> <span id="L305" class="LineNr">305 </span> <span class="Constant">23</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">95</span> <span id="L306" class="LineNr">306 </span> <span class="Constant">24</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">96</span> <span id="L307" class="LineNr">307 </span> <span class="Constant">30</span>:num<span class="Special"> &lt;- </span>index <span class="Constant">10</span>:&amp;:@:num/lookup<span class="Delimiter">,</span> <span class="Constant">1</span> <span id="L308" class="LineNr">308 </span>] <span id="L309" class="LineNr">309 </span><span class="traceContains">+mem: storing 95 in location 30</span> <span id="L310" class="LineNr">310 </span> <span id="L311" class="LineNr">311 </span><span class="Delimiter">:(before &quot;Update INDEX base in Check&quot;)</span> <span id="L312" class="LineNr">312 </span><span class="Normal">if</span> <span class="Delimiter">(</span>!canonize_type<span class="Delimiter">(</span>base<span class="Delimiter">))</span> <span class="Identifier">break</span><span class="Delimiter">;</span> <span id="L313" class="LineNr">313 </span><span class="Delimiter">:(before &quot;Update INDEX index in Check&quot;)</span> <span id="L314" class="LineNr">314 </span><span class="Normal">if</span> <span class="Delimiter">(</span>!canonize_type<span class="Delimiter">(</span>index<span class="Delimiter">))</span> <span class="Identifier">break</span><span class="Delimiter">;</span> <span id="L315" class="LineNr">315 </span><span class="Delimiter">:(before &quot;Update INDEX product in Check&quot;)</span> <span id="L316" class="LineNr">316 </span><span class="Normal">if</span> <span class="Delimiter">(</span>!canonize_type<span class="Delimiter">(</span>product<span class="Delimiter">))</span> <span class="Identifier">break</span><span class="Delimiter">;</span> <span id="L317" class="LineNr">317 </span> <span id="L318" class="LineNr">318 </span><span class="Delimiter">:(before &quot;Update INDEX base in Run&quot;)</span> <span id="L319" class="LineNr">319 </span><a href='035lookup.cc.html#L66'>canonize</a><span class="Delimiter">(</span>base<span class="Delimiter">);</span> <span id="L320" class="LineNr">320 </span><span class="Delimiter">:(before &quot;Update INDEX index in Run&quot;)</span> <span id="L321" class="LineNr">321 </span><a href='035lookup.cc.html#L66'>canonize</a><span class="Delimiter">(</span>index<span class="Delimiter">);</span> <span id="L322" class="LineNr">322 </span> <span id="L323" class="LineNr">323 </span><span class="Delimiter">:(scenario put_index_indirect)</span> <span id="L324" class="LineNr">324 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [ <span id="L325" class="LineNr">325 </span> <span class="Comment"># skip alloc id for 10:&amp;:@:num</span> <span id="L326" class="LineNr">326 </span> <span class="Constant">11</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">20</span> <span id="L327" class="LineNr">327 </span> <span class="Comment"># skip alloc id for payload</span> <span id="L328" class="LineNr">328 </span> <span class="Constant">21</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">3</span> <span class="Comment"># array length</span> <span id="L329" class="LineNr">329 </span> <span class="Constant">22</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">94</span> <span id="L330" class="LineNr">330 </span> <span class="Constant">23</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">95</span> <span id="L331" class="LineNr">331 </span> <span class="Constant">24</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">96</span> <span id="L332" class="LineNr">332 </span> <span class="Constant">10</span>:&amp;:@:num/lookup<span class="Special"> &lt;- </span>put-index <span class="Constant">10</span>:&amp;:@:num/lookup<span class="Delimiter">,</span> <span class="Constant">1</span><span class="Delimiter">,</span> <span class="Constant">97</span> <span id="L333" class="LineNr">333 </span>] <span id="L334" class="LineNr">334 </span><span class="traceContains">+mem: storing 97 in location 23</span> <span id="L335" class="LineNr">335 </span> <span id="L336" class="LineNr">336 </span><span class="Delimiter">:(scenario put_index_indirect_2)</span> <span id="L337" class="LineNr">337 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [ <span id="L338" class="LineNr">338 </span> <span class="Constant">10</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">3</span> <span class="Comment"># array length</span> <span id="L339" class="LineNr">339 </span> <span class="Constant">11</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">94</span> <span id="L340" class="LineNr">340 </span> <span class="Constant">12</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">95</span> <span id="L341" class="LineNr">341 </span> <span class="Constant">13</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">96</span> <span id="L342" class="LineNr">342 </span> <span class="Comment"># skip alloc id for address</span> <span id="L343" class="LineNr">343 </span> <span class="Constant">21</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">30</span> <span id="L344" class="LineNr">344 </span> <span class="Comment"># skip alloc id for payload</span> <span id="L345" class="LineNr">345 </span> <span class="Constant">31</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">1</span> <span class="Comment"># index</span> <span id="L346" class="LineNr">346 </span> <span class="Constant">10</span>:@:num<span class="Special"> &lt;- </span>put-index <span class="Constant">10</span>:@:num<span class="Delimiter">,</span> <span class="Constant">20</span>:&amp;:num/lookup<span class="Delimiter">,</span> <span class="Constant">97</span> <span id="L347" class="LineNr">347 </span>] <span id="L348" class="LineNr">348 </span><span class="traceContains">+mem: storing 97 in location 12</span> <span id="L349" class="LineNr">349 </span> <span id="L350" class="LineNr">350 </span><span class="Delimiter">:(scenario put_index_product_error_with_lookup)</span> <span id="L351" class="LineNr">351 </span><span class="Special">% Hide_errors = true;</span> <span id="L352" class="LineNr">352 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [ <span id="L353" class="LineNr">353 </span> <span class="Comment"># skip alloc id for 10:&amp;:@:num</span> <span id="L354" class="LineNr">354 </span> <span class="Constant">11</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">20</span> <span id="L355" class="LineNr">355 </span> <span class="Comment"># skip alloc id for payload</span> <span id="L356" class="LineNr">356 </span> <span class="Constant">21</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">3</span> <span class="Comment"># array length</span> <span id="L357" class="LineNr">357 </span> <span class="Constant">22</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">94</span> <span id="L358" class="LineNr">358 </span> <span class="Constant">23</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">95</span> <span id="L359" class="LineNr">359 </span> <span class="Constant">24</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">96</span> <span id="L360" class="LineNr">360 </span> <span class="Constant">10</span>:&amp;:@:num<span class="Special"> &lt;- </span>put-index <span class="Constant">10</span>:&amp;:@:num/lookup<span class="Delimiter">,</span> <span class="Constant">1</span><span class="Delimiter">,</span> <span class="Constant">34</span> <span id="L361" class="LineNr">361 </span>] <span id="L362" class="LineNr">362 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: product of 'put-index' must be first ingredient '10:&amp;:@:num/lookup', but got '10:&amp;:@:num'</span> <span id="L363" class="LineNr">363 </span> <span id="L364" class="LineNr">364 </span><span class="Delimiter">:(before &quot;End PUT_INDEX Product Checks&quot;)</span> <span id="L365" class="LineNr">365 </span>reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> p = inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span> <span id="L366" class="LineNr">366 </span><span class="Normal">if</span> <span class="Delimiter">(</span>!canonize_type<span class="Delimiter">(</span>p<span class="Delimiter">))</span> <span class="Identifier">break</span><span class="Delimiter">;</span> <span class="Comment">// error raised elsewhere</span> <span id="L367" class="LineNr">367 </span>reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> i = inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span> <span id="L368" class="LineNr">368 </span><span class="Normal">if</span> <span class="Delimiter">(</span>!canonize_type<span class="Delimiter">(</span>i<span class="Delimiter">))</span> <span class="Identifier">break</span><span class="Delimiter">;</span> <span class="Comment">// error raised elsewhere</span> <span id="L369" class="LineNr">369 </span><span class="Normal">if</span> <span class="Delimiter">(</span>!types_strictly_match<span class="Delimiter">(</span>p<span class="Delimiter">,</span> i<span class="Delimiter">))</span> <span class="Delimiter">{</span> <span id="L370" class="LineNr">370 </span> <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span 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 length_indirect)</span> <span id="L398" class="LineNr">398 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [ <span id="L399" class="LineNr">399 </span> <span class="Comment"># skip alloc id for 10:&amp;:@:num</span> <span id="L400" class="LineNr">400 </span> <span class="Constant">11</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">20</span> <span id="L401" class="LineNr">401 </span> <span class="Comment"># skip alloc id for payload</span> <span id="L402" class="LineNr">402 </span> <span class="Constant">21</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">3</span> <span class="Comment"># array length</span> <span id="L403" class="LineNr">403 </span> <span class="Constant">22</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">94</span> <span id="L404" class="LineNr">404 </span> <span class="Constant">23</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">95</span> <span id="L405" class="LineNr">405 </span> <span class="Constant">24</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">96</span> <span id="L406" class="LineNr">406 </span> <span class="Constant">30</span>:num<span class="Special"> &lt;- </span>length <span class="Constant">10</span>:&amp;:array:num/lookup <span id="L407" class="LineNr">407 </span>] <span id="L408" class="LineNr">408 </span><span class="traceContains">+mem: storing 3 in location 30</span> <span id="L409" class="LineNr">409 </span> <span id="L410" class="LineNr">410 </span><span class="Delimiter">:(before &quot;Update LENGTH array in Check&quot;)</span> <span id="L411" class="LineNr">411 </span><span class="Normal">if</span> <span class="Delimiter">(</span>!canonize_type<span class="Delimiter">(</span>array<span class="Delimiter">))</span> <span class="Identifier">break</span><span class="Delimiter">;</span> <span id="L412" class="LineNr">412 </span><span class="Delimiter">:(before &quot;Update LENGTH array in Run&quot;)</span> <span id="L413" class="LineNr">413 </span><a href='035lookup.cc.html#L66'>canonize</a><span class="Delimiter">(</span>array<span class="Delimiter">);</span> <span id="L414" class="LineNr">414 </span> <span id="L415" class="LineNr">415 </span><span class="Delimiter">:(scenario maybe_convert_indirect)</span> <span id="L416" class="LineNr">416 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [ <span id="L417" class="LineNr">417 </span> <span class="Comment"># skip alloc id for 10:&amp;:number-or-point</span> <span id="L418" class="LineNr">418 </span> <span class="Constant">11</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">20</span> <span id="L419" class="LineNr">419 </span> <span class="Comment"># skip alloc id for payload</span> <span id="L420" class="LineNr">420 </span> <span class="Constant">21</span>:number-<span class="Normal">or</span>-point<span class="Special"> &lt;- </span>merge <span class="Constant">0</span>/number<span class="Delimiter">,</span> <span class="Constant">94</span> <span id="L421" class="LineNr">421 </span> <span class="Constant">30</span>:num<span class="Delimiter">,</span> <span class="Constant">31</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>maybe-convert <span class="Constant">10</span>:&amp;:number-<span class="Normal">or</span>-point/lookup<span class="Delimiter">,</span> <span class="Constant">i:variant</span> <span id="L422" class="LineNr">422 </span>] <span id="L423" class="LineNr">423 </span><span class="traceContains">+mem: storing 1 in location 31</span> <span id="L424" class="LineNr">424 </span><span class="traceContains">+mem: storing 94 in location 30</span> <span id="L425" class="LineNr">425 </span> <span id="L426" class="LineNr">426 </span><span class="Delimiter">:(scenario maybe_convert_indirect_2)</span> <span id="L427" class="LineNr">427 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [ <span id="L428" class="LineNr">428 </span> <span class="Comment"># skip alloc id for 10:&amp;:number-or-point</span> <span id="L429" class="LineNr">429 </span> <span class="Constant">11</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">20</span> <span id="L430" class="LineNr">430 </span> <span class="Comment"># skip alloc id for payload</span> <span id="L431" class="LineNr">431 </span> <span class="Constant">21</span>:number-<span class="Normal">or</span>-point<span class="Special"> &lt;- </span>merge <span class="Constant">0</span>/number<span class="Delimiter">,</span> <span class="Constant">94</span> <span id="L432" class="LineNr">432 </span> <span class="Comment"># skip alloc id for 30:&amp;:num</span> <span id="L433" class="LineNr">433 </span> <span class="Constant">31</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">40</span> <span id="L434" class="LineNr">434 </span> <span class="Constant">30</span>:&amp;:num/lookup<span class="Delimiter">,</span> <span class="Constant">50</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>maybe-convert <span class="Constant">10</span>:&amp;:number-<span class="Normal">or</span>-point/lookup<span class="Delimiter">,</span> <span class="Constant">i:variant</span> <span id="L435" class="LineNr">435 </span>] <span id="L436" class="LineNr">436 </span><span class="traceContains">+mem: storing 1 in location 50</span> <span id="L437" class="LineNr">437 </span><span class="traceContains">+mem: storing 94 in location 41</span> <span id="L438" class="LineNr">438 </span> <span id="L439" class="LineNr">439 </span><span class="Delimiter">:(scenario maybe_convert_indirect_3)</span> <span id="L440" class="LineNr">440 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [ <span id="L441" class="LineNr">441 </span> <span class="Comment"># skip alloc id for 10:&amp;:number-or-point</span> <span id="L442" class="LineNr">442 </span> <span class="Constant">11</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">20</span> <span id="L443" class="LineNr">443 </span> <span class="Comment"># skip alloc id for payload</span> <span id="L444" class="LineNr">444 </span> <span class="Constant">21</span>:number-<span class="Normal">or</span>-point<span class="Special"> &lt;- </span>merge <span class="Constant">0</span>/number<span class="Delimiter">,</span> <span class="Constant">94</span> <span id="L445" class="LineNr">445 </span> <span class="Comment"># skip alloc id for 30:&amp;:bool</span> <span id="L446" class="LineNr">446 </span> <span class="Constant">31</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">40</span> <span id="L447" class="LineNr">447 </span> <span class="Constant">50</span>:num<span class="Delimiter">,</span> <span class="Constant">30</span>:&amp;:<span class="Normal">bool</span>/lookup<span class="Special"> &lt;- </span>maybe-convert <span class="Constant">10</span>:&amp;:number-<span class="Normal">or</span>-point/lookup<span class="Delimiter">,</span> <span class="Constant">i:variant</span> <span id="L448" class="LineNr">448 </span>] <span id="L449" class="LineNr">449 </span><span class="traceContains">+mem: storing 1 in location 41</span> <span id="L450" class="LineNr">450 </span><span class="traceContains">+mem: storing 94 in location 50</span> <span id="L451" class="LineNr">451 </span> <span id="L452" class="LineNr">452 </span><span class="Delimiter">:(before &quot;Update MAYBE_CONVERT base in Check&quot;)</span> <span id="L453" class="LineNr">453 </span><span class="Normal">if</span> <span class="Delimiter">(</span>!canonize_type<span class="Delimiter">(</span>base<span class="Delimiter">))</span> <span class="Identifier">break</span><span class="Delimiter">;</span> <span id="L454" class="LineNr">454 </span><span class="Delimiter">:(before &quot;Update MAYBE_CONVERT product in Check&quot;)</span> <span id="L455" class="LineNr">455 </span><span class="Normal">if</span> <span class="Delimiter">(</span>!canonize_type<span class="Delimiter">(</span>product<span class="Delimiter">))</span> <span class="Identifier">break</span><span class="Delimiter">;</span> <span id="L456" class="LineNr">456 </span><span class="Delimiter">:(before &quot;Update MAYBE_CONVERT status in Check&quot;)</span> <span id="L457" class="LineNr">457 </span><span class="Normal">if</span> <span class="Delimiter">(</span>!canonize_type<span class="Delimiter">(</span>status<span class="Delimiter">))</span> <span class="Identifier">break</span><span class="Delimiter">;</span> <span id="L458" class="LineNr">458 </span> <span id="L459" class="LineNr">459 </span><span class="Delimiter">:(before &quot;Update MAYBE_CONVERT base in Run&quot;)</span> <span id="L460" class="LineNr">460 </span><a href='035lookup.cc.html#L66'>canonize</a><span class="Delimiter">(</span>base<span class="Delimiter">);</span> <span id="L461" class="LineNr">461 </span><span class="Delimiter">:(before &quot;Update MAYBE_CONVERT product in Run&quot;)</span> <span id="L462" class="LineNr">462 </span><a href='035lookup.cc.html#L66'>canonize</a><span class="Delimiter">(</span>product<span class="Delimiter">);</span> <span id="L463" class="LineNr">463 </span><span class="Delimiter">:(before &quot;Update MAYBE_CONVERT status in Run&quot;)</span> <span id="L464" class="LineNr">464 </span><a href='035lookup.cc.html#L66'>canonize</a><span class="Delimiter">(</span>status<span class="Delimiter">);</span> <span id="L465" class="LineNr">465 </span> <span id="L466" class="LineNr">466 </span><span class="Delimiter">:(scenario merge_exclusive_container_indirect)</span> <span id="L467" class="LineNr">467 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [ <span id="L468" class="LineNr">468 </span> <span class="Comment"># skip alloc id for 10:&amp;:number-or-point</span> <span id="L469" class="LineNr">469 </span> <span class="Constant">11</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">20</span> <span id="L470" class="LineNr">470 </span> <span class="Constant">10</span>:&amp;:number-<span class="Normal">or</span>-point/lookup<span class="Special"> &lt;- </span>merge <span class="Constant">0</span>/number<span class="Delimiter">,</span> <span class="Constant">34</span> <span id="L471" class="LineNr">471 </span>] <span id="L472" class="LineNr">472 </span><span class="Comment"># skip alloc id</span> <span id="L473" class="LineNr">473 </span><span class="traceContains">+mem: storing 0 in location 21</span> <span id="L474" class="LineNr">474 </span><span class="traceContains">+mem: storing 34 in location 22</span> <span id="L475" class="LineNr">475 </span> <span id="L476" class="LineNr">476 </span><span class="Delimiter">:(before &quot;Update size_mismatch Check for MERGE(x)</span> <span id="L477" class="LineNr">477 </span><a href='035lookup.cc.html#L66'>canonize</a><span class="Delimiter">(</span>x<span class="Delimiter">);</span> <span id="L478" class="LineNr">478 </span> <span id="L479" class="LineNr">479 </span><span class="Comment">//: abbreviation for '/lookup': a prefix '*'</span> <span id="L480" class="LineNr">480 </span> <span id="L481" class="LineNr">481 </span><span class="Delimiter">:(scenario lookup_abbreviation)</span> <span id="L482" class="LineNr">482 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [ <span id="L483" class="LineNr">483 </span> <span class="Comment"># skip alloc id for 10:&amp;:num</span> <span id="L484" class="LineNr">484 </span> <span class="Constant">11</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">20</span> <span id="L485" class="LineNr">485 </span> <span class="Comment"># skip alloc id for payload</span> <span id="L486" class="LineNr">486 </span> <span class="Constant">21</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">94</span> <span id="L487" class="LineNr">487 </span> <span class="Constant">30</span>:num<span class="Special"> &lt;- </span>copy *<span class="Constant">10</span>:&amp;:num <span id="L488" class="LineNr">488 </span>] <span id="L489" class="LineNr">489 </span><span class="traceContains">+parse: ingredient: {10: (&quot;&amp;&quot; &quot;num&quot;), &quot;lookup&quot;: ()}</span> <span id="L490" class="LineNr">490 </span><span class="traceContains">+mem: storing 94 in location 30</span> <span id="L491" class="LineNr">491 </span> <span id="L492" class="LineNr">492 </span><span class="Delimiter">:(before &quot;End Parsing reagent&quot;)</span> <span id="L493" class="LineNr">493 </span><span class="Delimiter">{</span> <span id="L494" class="LineNr">494 </span> <span class="Normal">while</span> <span class="Delimiter">(</span><a href='001help.cc.html#L77'>starts_with</a><span class="Delimiter">(</span>name<span class="Delimiter">,</span> <span class="Constant">&quot;*&quot;</span><span class="Delimiter">))</span> <span class="Delimiter">{</span> <span id="L495" class="LineNr">495 </span> name<span class="Delimiter">.</span>erase<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">,</span> <span class="Constant">1</span><span class="Delimiter">);</span> <span id="L496" class="LineNr">496 </span> properties<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>pair&lt;string<span class="Delimiter">,</span> string_tree*&gt;<span class="Delimiter">(</span><span class="Constant">&quot;lookup&quot;</span><span class="Delimiter">,</span> <span class="Constant">NULL</span><span class="Delimiter">));</span> <span id="L497" class="LineNr">497 </span> <span class="Delimiter">}</span> <span id="L498" class="LineNr">498 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>name<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span id="L499" class="LineNr">499 </span> <a href='003trace.cc.html#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> <!-- vim: set foldmethod=manual : -->