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

539 lines
71 KiB
HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - 040brace.cc</title>
<meta name="Generator" content="Vim/8.0">
<meta name="plugin-version" content="vim7.4_v2">
<meta name="syntax" content="cpp">
<meta name="settings" content="number_lines,use_css,pre_wrap,no_foldcolumn,expand_tabs,line_ids,prevent_copy=">
<meta name="colorscheme" content="minimal-light">
<style type="text/css">
<!--
pre { white-space: pre-wrap; font-family: monospace; color: #000000; background-color: #c6c6c6; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #c6c6c6; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.LineNr { }
.Constant { color: #008787; }
.muRecipe { color: #ff8700; }
.Delimiter { color: #c000c0; }
.Special { color: #d70000; }
.Identifier { color: #af5f00; }
.Normal { color: #000000; background-color: #c6c6c6; padding-bottom: 1px; }
.Comment { color: #005faf; }
.traceContains { color: #005f00; }
-->
</style>
<script type='text/javascript'>
<!--
/* function to open any folds containing a jumped-to line before jumping to it */
function JumpToLine()
{
var lineNum;
lineNum = window.location.hash;
lineNum = lineNum.substr(1); /* strip off '#' */
if (lineNum.indexOf('L') == -1) {
lineNum = 'L'+lineNum;
}
lineElem = document.getElementById(lineNum);
/* Always jump to new location even if the line was hidden inside a fold, or
* we corrected the raw number to a line ID.
*/
if (lineElem) {
lineElem.scrollIntoView(true);
}
return true;
}
if ('onhashchange' in window) {
window.onhashchange = JumpToLine;
}
-->
</script>
</head>
<body onload='JumpToLine();'>
<a href='https://github.com/akkartik/mu/blob/master/040brace.cc'>https://github.com/akkartik/mu/blob/master/040brace.cc</a>
<pre id='vimCodeElement'>
<span id="L1" class="LineNr"> 1 </span><span class="Comment">//: Structured programming</span>
<span id="L2" class="LineNr"> 2 </span><span class="Comment">//:</span>
<span id="L3" class="LineNr"> 3 </span><span class="Comment">//: Our jump recipes are quite inconvenient to use, so Mu provides a</span>
<span id="L4" class="LineNr"> 4 </span><span class="Comment">//: lightweight tool called 'transform_braces' to work in a slightly more</span>
<span id="L5" class="LineNr"> 5 </span><span class="Comment">//: convenient format with nested braces:</span>
<span id="L6" class="LineNr"> 6 </span><span class="Comment">//:</span>
<span id="L7" class="LineNr"> 7 </span><span class="Comment">//: {</span>
<span id="L8" class="LineNr"> 8 </span><span class="Comment">//: some instructions</span>
<span id="L9" class="LineNr"> 9 </span><span class="Comment">//: {</span>
<span id="L10" class="LineNr"> 10 </span><span class="Comment">//: more instructions</span>
<span id="L11" class="LineNr"> 11 </span><span class="Comment">//: }</span>
<span id="L12" class="LineNr"> 12 </span><span class="Comment">//: }</span>
<span id="L13" class="LineNr"> 13 </span><span class="Comment">//:</span>
<span id="L14" class="LineNr"> 14 </span><span class="Comment">//: Braces are just labels, they require no special parsing. The pseudo</span>
<span id="L15" class="LineNr"> 15 </span><span class="Comment">//: instructions 'loop' and 'break' jump to just after the enclosing '{' and</span>
<span id="L16" class="LineNr"> 16 </span><span class="Comment">//: '}' respectively.</span>
<span id="L17" class="LineNr"> 17 </span><span class="Comment">//:</span>
<span id="L18" class="LineNr"> 18 </span><span class="Comment">//: Conditional and unconditional 'loop' and 'break' should give us 80% of the</span>
<span id="L19" class="LineNr"> 19 </span><span class="Comment">//: benefits of the control-flow primitives we're used to in other languages,</span>
<span id="L20" class="LineNr"> 20 </span><span class="Comment">//: like 'if', 'while', 'for', etc.</span>
<span id="L21" class="LineNr"> 21 </span>
<span id="L22" class="LineNr"> 22 </span><span class="Delimiter">:(scenarios transform)</span>
<span id="L23" class="LineNr"> 23 </span><span class="Delimiter">:(scenario brace_conversion)</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="Delimiter">{</span>
<span id="L26" class="LineNr"> 26 </span> <span class="Identifier">break</span>
<span id="L27" class="LineNr"> 27 </span> <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
<span id="L28" class="LineNr"> 28 </span> <span class="Delimiter">}</span>
<span id="L29" class="LineNr"> 29 </span>]
<span id="L30" class="LineNr"> 30 </span><span class="traceContains">+transform: --- <a href='012transform.cc.html#L99'>transform</a> braces for <a href='010vm.cc.html#L19'>recipe</a> <a href='000organization.cc.html#L113'>main</a></span>
<span id="L31" class="LineNr"> 31 </span><span class="traceContains">+transform: jump 1:offset</span>
<span id="L32" class="LineNr"> 32 </span><span class="traceContains">+transform: copy ...</span>
<span id="L33" class="LineNr"> 33 </span>
<span id="L34" class="LineNr"> 34 </span><span class="Delimiter">:(before &quot;End Instruction Modifying Transforms&quot;)</span>
<span id="L35" class="LineNr"> 35 </span><span class="Special">Transform</span><span class="Delimiter">.</span>push_back<span class="Delimiter">(</span><a href='040brace.cc.html#L38'>transform_braces</a><span class="Delimiter">);</span> <span class="Comment">// idempotent</span>
<span id="L36" class="LineNr"> 36 </span>
<span id="L37" class="LineNr"> 37 </span><span class="Delimiter">:(code)</span>
<span id="L38" class="LineNr"> 38 </span><span class="Normal">void</span> <a href='040brace.cc.html#L38'>transform_braces</a><span class="Delimiter">(</span><span class="Normal">const</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L39" class="LineNr"> 39 </span> <span class="Normal">const</span> <span class="Normal">bool</span> OPEN =<span class="Constant"> false</span><span class="Delimiter">,</span> CLOSE =<span class="Constant"> true</span><span class="Delimiter">;</span>
<span id="L40" class="LineNr"> 40 </span> <span class="Comment">// use signed integer for step index because we'll be doing arithmetic on it</span>
<span id="L41" class="LineNr"> 41 </span> list&lt;pair&lt;<span class="Normal">bool</span><span class="Comment">/*</span><span class="Comment">OPEN/CLOSE</span><span class="Comment">*/</span><span class="Delimiter">,</span> <span class="Comment">/*</span><span class="Comment">step</span><span class="Comment">*/</span><span class="Normal">int</span>&gt; &gt; braces<span class="Delimiter">;</span>
<span id="L42" class="LineNr"> 42 </span> <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;--- <a href='012transform.cc.html#L99'>transform</a> braces for <a href='010vm.cc.html#L19'>recipe</a> &quot;</span> &lt;&lt; get<span class="Delimiter">(</span><span class="Special">Recipe</span><span class="Delimiter">,</span> r<span class="Delimiter">).</span>name &lt;&lt; <a href='003trace.cc.html#L225'>end</a><span class="Delimiter">();</span>
<span id="L43" class="LineNr"> 43 </span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> index = <span class="Constant">0</span><span class="Delimiter">;</span> index &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span><span class="Special">Recipe</span><span class="Delimiter">,</span> r<span class="Delimiter">).</span>steps<span class="Delimiter">);</span> ++index<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L44" class="LineNr"> 44 </span> <span class="Normal">const</span> instruction&amp; inst = get<span class="Delimiter">(</span><span class="Special">Recipe</span><span class="Delimiter">,</span> r<span class="Delimiter">).</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>index<span class="Delimiter">);</span>
<span id="L45" class="LineNr"> 45 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>label == <span class="Constant">&quot;{&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L46" class="LineNr"> 46 </span> <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span><span class="Special">Recipe</span><span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;push (open, &quot;</span> &lt;&lt; index &lt;&lt; <span class="Constant">&quot;)&quot;</span> &lt;&lt; <a href='003trace.cc.html#L225'>end</a><span class="Delimiter">();</span>
<span id="L47" class="LineNr"> 47 </span> braces<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>pair&lt;<span class="Normal">bool</span><span class="Delimiter">,</span><span class="Normal">int</span>&gt;<span class="Delimiter">(</span>OPEN<span class="Delimiter">,</span> index<span class="Delimiter">));</span>
<span id="L48" class="LineNr"> 48 </span> <span class="Delimiter">}</span>
<span id="L49" class="LineNr"> 49 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>label == <span class="Constant">&quot;}&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L50" class="LineNr"> 50 </span> <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;push (close, &quot;</span> &lt;&lt; index &lt;&lt; <span class="Constant">&quot;)&quot;</span> &lt;&lt; <a href='003trace.cc.html#L225'>end</a><span class="Delimiter">();</span>
<span id="L51" class="LineNr"> 51 </span> braces<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>pair&lt;<span class="Normal">bool</span><span class="Delimiter">,</span><span class="Normal">int</span>&gt;<span class="Delimiter">(</span>CLOSE<span class="Delimiter">,</span> index<span class="Delimiter">));</span>
<span id="L52" class="LineNr"> 52 </span> <span class="Delimiter">}</span>
<span id="L53" class="LineNr"> 53 </span> <span class="Delimiter">}</span>
<span id="L54" class="LineNr"> 54 </span> stack&lt;<span class="Comment">/*</span><span class="Comment">step</span><span class="Comment">*/</span><span class="Normal">int</span>&gt; open_braces<span class="Delimiter">;</span>
<span id="L55" class="LineNr"> 55 </span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> index = <span class="Constant">0</span><span class="Delimiter">;</span> index &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span><span class="Special">Recipe</span><span class="Delimiter">,</span> r<span class="Delimiter">).</span>steps<span class="Delimiter">);</span> ++index<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L56" class="LineNr"> 56 </span> instruction&amp; inst = get<span class="Delimiter">(</span><span class="Special">Recipe</span><span class="Delimiter">,</span> r<span class="Delimiter">).</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>index<span class="Delimiter">);</span>
<span id="L57" class="LineNr"> 57 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>label == <span class="Constant">&quot;{&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L58" class="LineNr"> 58 </span> open_braces<span class="Delimiter">.</span>push<span class="Delimiter">(</span>index<span class="Delimiter">);</span>
<span id="L59" class="LineNr"> 59 </span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
<span id="L60" class="LineNr"> 60 </span> <span class="Delimiter">}</span>
<span id="L61" class="LineNr"> 61 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>label == <span class="Constant">&quot;}&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L62" class="LineNr"> 62 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>open_braces<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
<span id="L63" class="LineNr"> 63 </span> <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span><span class="Special">Recipe</span><span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;unbalanced '}'\n&quot;</span> &lt;&lt; <a href='003trace.cc.html#L225'>end</a><span class="Delimiter">();</span>
<span id="L64" class="LineNr"> 64 </span> <span class="Identifier">return</span><span class="Delimiter">;</span>
<span id="L65" class="LineNr"> 65 </span> <span class="Delimiter">}</span>
<span id="L66" class="LineNr"> 66 </span> open_braces<span class="Delimiter">.</span>pop<span class="Delimiter">();</span>
<span id="L67" class="LineNr"> 67 </span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
<span id="L68" class="LineNr"> 68 </span> <span class="Delimiter">}</span>
<span id="L69" class="LineNr"> 69 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>is_label<span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
<span id="L70" class="LineNr"> 70 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>name != <span class="Constant">&quot;loop&quot;</span>
<span id="L71" class="LineNr"> 71 </span> &amp;&amp; inst<span class="Delimiter">.</span>name != <span class="Constant">&quot;loop-if&quot;</span>
<span id="L72" class="LineNr"> 72 </span> &amp;&amp; inst<span class="Delimiter">.</span>name != <span class="Constant">&quot;loop-unless&quot;</span>
<span id="L73" class="LineNr"> 73 </span> &amp;&amp; inst<span class="Delimiter">.</span>name != <span class="Constant">&quot;break&quot;</span>
<span id="L74" class="LineNr"> 74 </span> &amp;&amp; inst<span class="Delimiter">.</span>name != <span class="Constant">&quot;break-if&quot;</span>
<span id="L75" class="LineNr"> 75 </span> &amp;&amp; inst<span class="Delimiter">.</span>name != <span class="Constant">&quot;break-unless&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L76" class="LineNr"> 76 </span> <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">9992</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; inst<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot; ...&quot;</span> &lt;&lt; <a href='003trace.cc.html#L225'>end</a><span class="Delimiter">();</span>
<span id="L77" class="LineNr"> 77 </span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
<span id="L78" class="LineNr"> 78 </span> <span class="Delimiter">}</span>
<span id="L79" class="LineNr"> 79 </span> <span class="Comment">// check for errors</span>
<span id="L80" class="LineNr"> 80 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>name<span class="Delimiter">.</span>find<span class="Delimiter">(</span><span class="Constant">&quot;-if&quot;</span><span class="Delimiter">)</span> != string::npos || inst<span class="Delimiter">.</span>name<span class="Delimiter">.</span>find<span class="Delimiter">(</span><span class="Constant">&quot;-unless&quot;</span><span class="Delimiter">)</span> != string::npos<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L81" class="LineNr"> 81 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
<span id="L82" class="LineNr"> 82 </span> <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span><span class="Special">Recipe</span><span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;' expects 1 or 2 ingredients, but got none\n&quot;</span> &lt;&lt; <a href='003trace.cc.html#L225'>end</a><span class="Delimiter">();</span>
<span id="L83" class="LineNr"> 83 </span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
<span id="L84" class="LineNr"> 84 </span> <span class="Delimiter">}</span>
<span id="L85" class="LineNr"> 85 </span> <span class="Delimiter">}</span>
<span id="L86" class="LineNr"> 86 </span> <span class="Comment">// update instruction operation</span>
<span id="L87" class="LineNr"> 87 </span> string old_name = inst<span class="Delimiter">.</span>name<span class="Delimiter">;</span> <span class="Comment">// save a copy</span>
<span id="L88" class="LineNr"> 88 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>name<span class="Delimiter">.</span>find<span class="Delimiter">(</span><span class="Constant">&quot;-if&quot;</span><span class="Delimiter">)</span> != string::npos<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L89" class="LineNr"> 89 </span> inst<span class="Delimiter">.</span>name = <span class="Constant">&quot;jump-if&quot;</span><span class="Delimiter">;</span>
<span id="L90" class="LineNr"> 90 </span> inst<span class="Delimiter">.</span>operation = JUMP_IF<span class="Delimiter">;</span>
<span id="L91" class="LineNr"> 91 </span> <span class="Delimiter">}</span>
<span id="L92" class="LineNr"> 92 </span> <span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>name<span class="Delimiter">.</span>find<span class="Delimiter">(</span><span class="Constant">&quot;-unless&quot;</span><span class="Delimiter">)</span> != string::npos<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L93" class="LineNr"> 93 </span> inst<span class="Delimiter">.</span>name = <span class="Constant">&quot;jump-unless&quot;</span><span class="Delimiter">;</span>
<span id="L94" class="LineNr"> 94 </span> inst<span class="Delimiter">.</span>operation = JUMP_UNLESS<span class="Delimiter">;</span>
<span id="L95" class="LineNr"> 95 </span> <span class="Delimiter">}</span>
<span id="L96" class="LineNr"> 96 </span> <span class="Normal">else</span> <span class="Delimiter">{</span>
<span id="L97" class="LineNr"> 97 </span> inst<span class="Delimiter">.</span>name = <span class="Constant">&quot;jump&quot;</span><span class="Delimiter">;</span>
<span id="L98" class="LineNr"> 98 </span> inst<span class="Delimiter">.</span>operation = JUMP<span class="Delimiter">;</span>
<span id="L99" class="LineNr"> 99 </span> <span class="Delimiter">}</span>
<span id="L100" class="LineNr">100 </span> <span class="Comment">// check for explicitly provided targets</span>
<span id="L101" class="LineNr">101 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>name<span class="Delimiter">.</span>find<span class="Delimiter">(</span><span class="Constant">&quot;-if&quot;</span><span class="Delimiter">)</span> != string::npos || inst<span class="Delimiter">.</span>name<span class="Delimiter">.</span>find<span class="Delimiter">(</span><span class="Constant">&quot;-unless&quot;</span><span class="Delimiter">)</span> != string::npos<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L102" class="LineNr">102 </span> <span class="Comment">// conditional branches check arg 1</span>
<span id="L103" class="LineNr">103 </span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> &gt; <span class="Constant">1</span> &amp;&amp; is_literal<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">)))</span> <span class="Delimiter">{</span>
<span id="L104" class="LineNr">104 </span> <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">9992</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; inst<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">' '</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>name &lt;&lt; <span class="Constant">&quot;:offset&quot;</span> &lt;&lt; <a href='003trace.cc.html#L225'>end</a><span class="Delimiter">();</span>
<span id="L105" class="LineNr">105 </span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
<span id="L106" class="LineNr">106 </span> <span class="Delimiter">}</span>
<span id="L107" class="LineNr">107 </span> <span class="Delimiter">}</span>
<span id="L108" class="LineNr">108 </span> <span class="Normal">else</span> <span class="Delimiter">{</span>
<span id="L109" class="LineNr">109 </span> <span class="Comment">// unconditional branches check arg 0</span>
<span id="L110" class="LineNr">110 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>!inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>empty<span class="Delimiter">()</span> &amp;&amp; is_literal<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)))</span> <span class="Delimiter">{</span>
<span id="L111" class="LineNr">111 </span> <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">9992</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;jump &quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>name &lt;&lt; <span class="Constant">&quot;:offset&quot;</span> &lt;&lt; <a href='003trace.cc.html#L225'>end</a><span class="Delimiter">();</span>
<span id="L112" class="LineNr">112 </span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
<span id="L113" class="LineNr">113 </span> <span class="Delimiter">}</span>
<span id="L114" class="LineNr">114 </span> <span class="Delimiter">}</span>
<span id="L115" class="LineNr">115 </span> <span class="Comment">// if implicit, compute target</span>
<span id="L116" class="LineNr">116 </span> reagent target<span class="Delimiter">(</span><span class="Normal">new</span> type_tree<span class="Delimiter">(</span><span class="Constant">&quot;offset&quot;</span><span class="Delimiter">));</span>
<span id="L117" class="LineNr">117 </span> target<span class="Delimiter">.</span><a href='010vm.cc.html#L67'>set_value</a><span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
<span id="L118" class="LineNr">118 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>open_braces<span class="Delimiter">.</span>empty<span class="Delimiter">())</span>
<span id="L119" class="LineNr">119 </span> <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span><span class="Special">Recipe</span><span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; old_name &lt;&lt; <span class="Constant">&quot;' needs a '{' before\n&quot;</span> &lt;&lt; <a href='003trace.cc.html#L225'>end</a><span class="Delimiter">();</span>
<span id="L120" class="LineNr">120 </span> <span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span>old_name<span class="Delimiter">.</span>find<span class="Delimiter">(</span><span class="Constant">&quot;loop&quot;</span><span class="Delimiter">)</span> != string::npos<span class="Delimiter">)</span>
<span id="L121" class="LineNr">121 </span> target<span class="Delimiter">.</span><a href='010vm.cc.html#L67'>set_value</a><span class="Delimiter">(</span>open_braces<span class="Delimiter">.</span>top<span class="Delimiter">()</span>-index<span class="Delimiter">);</span>
<span id="L122" class="LineNr">122 </span> <span class="Normal">else</span> <span class="Comment">// break instruction</span>
<span id="L123" class="LineNr">123 </span> target<span class="Delimiter">.</span><a href='010vm.cc.html#L67'>set_value</a><span class="Delimiter">(</span><a href='040brace.cc.html#L135'>matching_brace</a><span class="Delimiter">(</span>open_braces<span class="Delimiter">.</span>top<span class="Delimiter">(),</span> braces<span class="Delimiter">,</span> r<span class="Delimiter">)</span> - index - <span class="Constant">1</span><span class="Delimiter">);</span>
<span id="L124" class="LineNr">124 </span> inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>target<span class="Delimiter">);</span>
<span id="L125" class="LineNr">125 </span> <span class="Comment">// log computed target</span>
<span id="L126" class="LineNr">126 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>name == <span class="Constant">&quot;jump&quot;</span><span class="Delimiter">)</span>
<span id="L127" class="LineNr">127 </span> <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">9992</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;jump &quot;</span> &lt;&lt; no_scientific<span class="Delimiter">(</span>target<span class="Delimiter">.</span>value<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;:offset&quot;</span> &lt;&lt; <a href='003trace.cc.html#L225'>end</a><span class="Delimiter">();</span>
<span id="L128" class="LineNr">128 </span> <span class="Normal">else</span>
<span id="L129" class="LineNr">129 </span> <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">9992</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; inst<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">' '</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>name &lt;&lt; <span class="Constant">&quot;, &quot;</span> &lt;&lt; no_scientific<span class="Delimiter">(</span>target<span class="Delimiter">.</span>value<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;:offset&quot;</span> &lt;&lt; <a href='003trace.cc.html#L225'>end</a><span class="Delimiter">();</span>
<span id="L130" class="LineNr">130 </span> <span class="Delimiter">}</span>
<span id="L131" class="LineNr">131 </span><span class="Delimiter">}</span>
<span id="L132" class="LineNr">132 </span>
<span id="L133" class="LineNr">133 </span><span class="Comment">// returns a signed integer not just so that we can return -1 but also to</span>
<span id="L134" class="LineNr">134 </span><span class="Comment">// enable future signed arithmetic</span>
<span id="L135" class="LineNr">135 </span><span class="Normal">int</span> <a href='040brace.cc.html#L135'>matching_brace</a><span class="Delimiter">(</span><span class="Normal">int</span> index<span class="Delimiter">,</span> <span class="Normal">const</span> list&lt;pair&lt;<span class="Normal">bool</span><span class="Delimiter">,</span> <span class="Normal">int</span>&gt; &gt;&amp; braces<span class="Delimiter">,</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L136" class="LineNr">136 </span> <span class="Normal">int</span> stacksize = <span class="Constant">0</span><span class="Delimiter">;</span>
<span id="L137" class="LineNr">137 </span> <span class="Normal">for</span> <span class="Delimiter">(</span>list&lt;pair&lt;<span class="Normal">bool</span><span class="Delimiter">,</span> <span class="Normal">int</span>&gt; &gt;::const_iterator p = braces<span class="Delimiter">.</span>begin<span class="Delimiter">();</span> p != braces<span class="Delimiter">.</span><a href='003trace.cc.html#L225'>end</a><span class="Delimiter">();</span> ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L138" class="LineNr">138 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>p<span class="Delimiter">-&gt;</span>second &lt; index<span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
<span id="L139" class="LineNr">139 </span> stacksize += <span class="Delimiter">(</span>p<span class="Delimiter">-&gt;</span>first ? <span class="Constant">1</span> : -<span class="Constant">1</span><span class="Delimiter">);</span>
<span id="L140" class="LineNr">140 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>stacksize == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Identifier">return</span> p<span class="Delimiter">-&gt;</span>second<span class="Delimiter">;</span>
<span id="L141" class="LineNr">141 </span> <span class="Delimiter">}</span>
<span id="L142" class="LineNr">142 </span> <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span><span class="Special">Recipe</span><span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;unbalanced '{'\n&quot;</span> &lt;&lt; <a href='003trace.cc.html#L225'>end</a><span class="Delimiter">();</span>
<span id="L143" class="LineNr">143 </span> <span class="Identifier">return</span> <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span><span class="Special">Recipe</span><span class="Delimiter">,</span> r<span class="Delimiter">).</span>steps<span class="Delimiter">);</span> <span class="Comment">// exit current routine</span>
<span id="L144" class="LineNr">144 </span><span class="Delimiter">}</span>
<span id="L145" class="LineNr">145 </span>
<span id="L146" class="LineNr">146 </span><span class="Delimiter">:(scenario loop)</span>
<span id="L147" class="LineNr">147 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
<span id="L148" class="LineNr">148 </span> <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
<span id="L149" class="LineNr">149 </span> <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
<span id="L150" class="LineNr">150 </span> <span class="Delimiter">{</span>
<span id="L151" class="LineNr">151 </span> <span class="Constant">3</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
<span id="L152" class="LineNr">152 </span> loop
<span id="L153" class="LineNr">153 </span> <span class="Delimiter">}</span>
<span id="L154" class="LineNr">154 </span>]
<span id="L155" class="LineNr">155 </span><span class="traceContains">+transform: --- <a href='012transform.cc.html#L99'>transform</a> braces for <a href='010vm.cc.html#L19'>recipe</a> <a href='000organization.cc.html#L113'>main</a></span>
<span id="L156" class="LineNr">156 </span><span class="traceContains">+transform: copy ...</span>
<span id="L157" class="LineNr">157 </span><span class="traceContains">+transform: copy ...</span>
<span id="L158" class="LineNr">158 </span><span class="traceContains">+transform: copy ...</span>
<span id="L159" class="LineNr">159 </span><span class="traceContains">+transform: jump -2:offset</span>
<span id="L160" class="LineNr">160 </span>
<span id="L161" class="LineNr">161 </span><span class="Delimiter">:(scenario break_empty_block)</span>
<span id="L162" class="LineNr">162 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
<span id="L163" class="LineNr">163 </span> <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
<span id="L164" class="LineNr">164 </span> <span class="Delimiter">{</span>
<span id="L165" class="LineNr">165 </span> <span class="Identifier">break</span>
<span id="L166" class="LineNr">166 </span> <span class="Delimiter">}</span>
<span id="L167" class="LineNr">167 </span>]
<span id="L168" class="LineNr">168 </span><span class="traceContains">+transform: --- <a href='012transform.cc.html#L99'>transform</a> braces for <a href='010vm.cc.html#L19'>recipe</a> <a href='000organization.cc.html#L113'>main</a></span>
<span id="L169" class="LineNr">169 </span><span class="traceContains">+transform: copy ...</span>
<span id="L170" class="LineNr">170 </span><span class="traceContains">+transform: jump 0:offset</span>
<span id="L171" class="LineNr">171 </span>
<span id="L172" class="LineNr">172 </span><span class="Delimiter">:(scenario break_cascading)</span>
<span id="L173" class="LineNr">173 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
<span id="L174" class="LineNr">174 </span> <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
<span id="L175" class="LineNr">175 </span> <span class="Delimiter">{</span>
<span id="L176" class="LineNr">176 </span> <span class="Identifier">break</span>
<span id="L177" class="LineNr">177 </span> <span class="Delimiter">}</span>
<span id="L178" class="LineNr">178 </span> <span class="Delimiter">{</span>
<span id="L179" class="LineNr">179 </span> <span class="Identifier">break</span>
<span id="L180" class="LineNr">180 </span> <span class="Delimiter">}</span>
<span id="L181" class="LineNr">181 </span>]
<span id="L182" class="LineNr">182 </span><span class="traceContains">+transform: --- <a href='012transform.cc.html#L99'>transform</a> braces for <a href='010vm.cc.html#L19'>recipe</a> <a href='000organization.cc.html#L113'>main</a></span>
<span id="L183" class="LineNr">183 </span><span class="traceContains">+transform: copy ...</span>
<span id="L184" class="LineNr">184 </span><span class="traceContains">+transform: jump 0:offset</span>
<span id="L185" class="LineNr">185 </span><span class="traceContains">+transform: jump 0:offset</span>
<span id="L186" class="LineNr">186 </span>
<span id="L187" class="LineNr">187 </span><span class="Delimiter">:(scenario break_cascading_2)</span>
<span id="L188" class="LineNr">188 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
<span id="L189" class="LineNr">189 </span> <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
<span id="L190" class="LineNr">190 </span> <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
<span id="L191" class="LineNr">191 </span> <span class="Delimiter">{</span>
<span id="L192" class="LineNr">192 </span> <span class="Identifier">break</span>
<span id="L193" class="LineNr">193 </span> <span class="Constant">3</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
<span id="L194" class="LineNr">194 </span> <span class="Delimiter">}</span>
<span id="L195" class="LineNr">195 </span> <span class="Delimiter">{</span>
<span id="L196" class="LineNr">196 </span> <span class="Identifier">break</span>
<span id="L197" class="LineNr">197 </span> <span class="Delimiter">}</span>
<span id="L198" class="LineNr">198 </span>]
<span id="L199" class="LineNr">199 </span><span class="traceContains">+transform: --- <a href='012transform.cc.html#L99'>transform</a> braces for <a href='010vm.cc.html#L19'>recipe</a> <a href='000organization.cc.html#L113'>main</a></span>
<span id="L200" class="LineNr">200 </span><span class="traceContains">+transform: copy ...</span>
<span id="L201" class="LineNr">201 </span><span class="traceContains">+transform: copy ...</span>
<span id="L202" class="LineNr">202 </span><span class="traceContains">+transform: jump 1:offset</span>
<span id="L203" class="LineNr">203 </span><span class="traceContains">+transform: copy ...</span>
<span id="L204" class="LineNr">204 </span><span class="traceContains">+transform: jump 0:offset</span>
<span id="L205" class="LineNr">205 </span>
<span id="L206" class="LineNr">206 </span><span class="Delimiter">:(scenario break_if)</span>
<span id="L207" class="LineNr">207 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
<span id="L208" class="LineNr">208 </span> <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
<span id="L209" class="LineNr">209 </span> <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
<span id="L210" class="LineNr">210 </span> <span class="Delimiter">{</span>
<span id="L211" class="LineNr">211 </span> <span class="Identifier">break</span>-<span class="Normal">if</span> <span class="Constant">2</span>:num
<span id="L212" class="LineNr">212 </span> <span class="Constant">3</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
<span id="L213" class="LineNr">213 </span> <span class="Delimiter">}</span>
<span id="L214" class="LineNr">214 </span> <span class="Delimiter">{</span>
<span id="L215" class="LineNr">215 </span> <span class="Identifier">break</span>
<span id="L216" class="LineNr">216 </span> <span class="Delimiter">}</span>
<span id="L217" class="LineNr">217 </span>]
<span id="L218" class="LineNr">218 </span><span class="traceContains">+transform: --- <a href='012transform.cc.html#L99'>transform</a> braces for <a href='010vm.cc.html#L19'>recipe</a> <a href='000organization.cc.html#L113'>main</a></span>
<span id="L219" class="LineNr">219 </span><span class="traceContains">+transform: copy ...</span>
<span id="L220" class="LineNr">220 </span><span class="traceContains">+transform: copy ...</span>
<span id="L221" class="LineNr">221 </span><span class="traceContains">+transform: jump-if 2, 1:offset</span>
<span id="L222" class="LineNr">222 </span><span class="traceContains">+transform: copy ...</span>
<span id="L223" class="LineNr">223 </span><span class="traceContains">+transform: jump 0:offset</span>
<span id="L224" class="LineNr">224 </span>
<span id="L225" class="LineNr">225 </span><span class="Delimiter">:(scenario break_nested)</span>
<span id="L226" class="LineNr">226 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
<span id="L227" class="LineNr">227 </span> <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
<span id="L228" class="LineNr">228 </span> <span class="Delimiter">{</span>
<span id="L229" class="LineNr">229 </span> <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
<span id="L230" class="LineNr">230 </span> <span class="Identifier">break</span>
<span id="L231" class="LineNr">231 </span> <span class="Delimiter">{</span>
<span id="L232" class="LineNr">232 </span> <span class="Constant">3</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
<span id="L233" class="LineNr">233 </span> <span class="Delimiter">}</span>
<span id="L234" class="LineNr">234 </span> <span class="Constant">4</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
<span id="L235" class="LineNr">235 </span> <span class="Delimiter">}</span>
<span id="L236" class="LineNr">236 </span>]
<span id="L237" class="LineNr">237 </span><span class="traceContains">+transform: jump 4:offset</span>
<span id="L238" class="LineNr">238 </span>
<span id="L239" class="LineNr">239 </span><span class="Delimiter">:(scenario break_nested_degenerate)</span>
<span id="L240" class="LineNr">240 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
<span id="L241" class="LineNr">241 </span> <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
<span id="L242" class="LineNr">242 </span> <span class="Delimiter">{</span>
<span id="L243" class="LineNr">243 </span> <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
<span id="L244" class="LineNr">244 </span> <span class="Identifier">break</span>
<span id="L245" class="LineNr">245 </span> <span class="Delimiter">{</span>
<span id="L246" class="LineNr">246 </span> <span class="Delimiter">}</span>
<span id="L247" class="LineNr">247 </span> <span class="Constant">4</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
<span id="L248" class="LineNr">248 </span> <span class="Delimiter">}</span>
<span id="L249" class="LineNr">249 </span>]
<span id="L250" class="LineNr">250 </span><span class="traceContains">+transform: jump 3:offset</span>
<span id="L251" class="LineNr">251 </span>
<span id="L252" class="LineNr">252 </span><span class="Delimiter">:(scenario break_nested_degenerate_2)</span>
<span id="L253" class="LineNr">253 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
<span id="L254" class="LineNr">254 </span> <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
<span id="L255" class="LineNr">255 </span> <span class="Delimiter">{</span>
<span id="L256" class="LineNr">256 </span> <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
<span id="L257" class="LineNr">257 </span> <span class="Identifier">break</span>
<span id="L258" class="LineNr">258 </span> <span class="Delimiter">{</span>
<span id="L259" class="LineNr">259 </span> <span class="Delimiter">}</span>
<span id="L260" class="LineNr">260 </span> <span class="Delimiter">}</span>
<span id="L261" class="LineNr">261 </span>]
<span id="L262" class="LineNr">262 </span><span class="traceContains">+transform: jump 2:offset</span>
<span id="L263" class="LineNr">263 </span>
<span id="L264" class="LineNr">264 </span><span class="Delimiter">:(scenario break_label)</span>
<span id="L265" class="LineNr">265 </span><span class="Special">% Hide_errors = true;</span>
<span id="L266" class="LineNr">266 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
<span id="L267" class="LineNr">267 </span> <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
<span id="L268" class="LineNr">268 </span> <span class="Delimiter">{</span>
<span id="L269" class="LineNr">269 </span> <span class="Identifier">break</span> <span class="Constant">+foo:offset</span>
<span id="L270" class="LineNr">270 </span> <span class="Delimiter">}</span>
<span id="L271" class="LineNr">271 </span>]
<span id="L272" class="LineNr">272 </span><span class="traceContains">+transform: jump +foo:offset</span>
<span id="L273" class="LineNr">273 </span>
<span id="L274" class="LineNr">274 </span><span class="Delimiter">:(scenario break_unless)</span>
<span id="L275" class="LineNr">275 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
<span id="L276" class="LineNr">276 </span> <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
<span id="L277" class="LineNr">277 </span> <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
<span id="L278" class="LineNr">278 </span> <span class="Delimiter">{</span>
<span id="L279" class="LineNr">279 </span> <span class="Identifier">break</span>-unless <span class="Constant">2</span>:num
<span id="L280" class="LineNr">280 </span> <span class="Constant">3</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
<span id="L281" class="LineNr">281 </span> <span class="Delimiter">}</span>
<span id="L282" class="LineNr">282 </span>]
<span id="L283" class="LineNr">283 </span><span class="traceContains">+transform: --- <a href='012transform.cc.html#L99'>transform</a> braces for <a href='010vm.cc.html#L19'>recipe</a> <a href='000organization.cc.html#L113'>main</a></span>
<span id="L284" class="LineNr">284 </span><span class="traceContains">+transform: copy ...</span>
<span id="L285" class="LineNr">285 </span><span class="traceContains">+transform: copy ...</span>
<span id="L286" class="LineNr">286 </span><span class="traceContains">+transform: jump-unless 2, 1:offset</span>
<span id="L287" class="LineNr">287 </span><span class="traceContains">+transform: copy ...</span>
<span id="L288" class="LineNr">288 </span>
<span id="L289" class="LineNr">289 </span><span class="Delimiter">:(scenario loop_unless)</span>
<span id="L290" class="LineNr">290 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
<span id="L291" class="LineNr">291 </span> <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
<span id="L292" class="LineNr">292 </span> <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
<span id="L293" class="LineNr">293 </span> <span class="Delimiter">{</span>
<span id="L294" class="LineNr">294 </span> loop-unless <span class="Constant">2</span>:num
<span id="L295" class="LineNr">295 </span> <span class="Constant">3</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
<span id="L296" class="LineNr">296 </span> <span class="Delimiter">}</span>
<span id="L297" class="LineNr">297 </span>]
<span id="L298" class="LineNr">298 </span><span class="traceContains">+transform: --- <a href='012transform.cc.html#L99'>transform</a> braces for <a href='010vm.cc.html#L19'>recipe</a> <a href='000organization.cc.html#L113'>main</a></span>
<span id="L299" class="LineNr">299 </span><span class="traceContains">+transform: copy ...</span>
<span id="L300" class="LineNr">300 </span><span class="traceContains">+transform: copy ...</span>
<span id="L301" class="LineNr">301 </span><span class="traceContains">+transform: jump-unless 2, -1:offset</span>
<span id="L302" class="LineNr">302 </span><span class="traceContains">+transform: copy ...</span>
<span id="L303" class="LineNr">303 </span>
<span id="L304" class="LineNr">304 </span><span class="Delimiter">:(scenario loop_nested)</span>
<span id="L305" class="LineNr">305 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
<span id="L306" class="LineNr">306 </span> <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
<span id="L307" class="LineNr">307 </span> <span class="Delimiter">{</span>
<span id="L308" class="LineNr">308 </span> <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
<span id="L309" class="LineNr">309 </span> <span class="Delimiter">{</span>
<span id="L310" class="LineNr">310 </span> <span class="Constant">3</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
<span id="L311" class="LineNr">311 </span> <span class="Delimiter">}</span>
<span id="L312" class="LineNr">312 </span> loop-<span class="Normal">if</span> <span class="Constant">4</span>:<span class="Normal">bool</span>
<span id="L313" class="LineNr">313 </span> <span class="Constant">5</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
<span id="L314" class="LineNr">314 </span> <span class="Delimiter">}</span>
<span id="L315" class="LineNr">315 </span>]
<span id="L316" class="LineNr">316 </span><span class="traceContains">+transform: --- <a href='012transform.cc.html#L99'>transform</a> braces for <a href='010vm.cc.html#L19'>recipe</a> <a href='000organization.cc.html#L113'>main</a></span>
<span id="L317" class="LineNr">317 </span><span class="traceContains">+transform: jump-if 4, -5:offset</span>
<span id="L318" class="LineNr">318 </span>
<span id="L319" class="LineNr">319 </span><span class="Delimiter">:(scenario loop_label)</span>
<span id="L320" class="LineNr">320 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
<span id="L321" class="LineNr">321 </span> <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
<span id="L322" class="LineNr">322 </span> +foo
<span id="L323" class="LineNr">323 </span> <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
<span id="L324" class="LineNr">324 </span>]
<span id="L325" class="LineNr">325 </span><span class="traceContains">+transform: --- <a href='012transform.cc.html#L99'>transform</a> braces for <a href='010vm.cc.html#L19'>recipe</a> <a href='000organization.cc.html#L113'>main</a></span>
<span id="L326" class="LineNr">326 </span><span class="traceContains">+transform: copy ...</span>
<span id="L327" class="LineNr">327 </span><span class="traceContains">+transform: copy ...</span>
<span id="L328" class="LineNr">328 </span>
<span id="L329" class="LineNr">329 </span><span class="Comment">//: test how things actually run</span>
<span id="L330" class="LineNr">330 </span><span class="Delimiter">:(scenarios run)</span>
<span id="L331" class="LineNr">331 </span><span class="Delimiter">:(scenario brace_conversion_and_run)</span>
<span id="L332" class="LineNr">332 </span><span class="muRecipe">def</span> test-factorial [
<span id="L333" class="LineNr">333 </span> <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">5</span>
<span id="L334" class="LineNr">334 </span> <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">1</span>
<span id="L335" class="LineNr">335 </span> <span class="Delimiter">{</span>
<span id="L336" class="LineNr">336 </span> <span class="Constant">3</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>equal <span class="Constant">1</span>:num<span class="Delimiter">,</span> <span class="Constant">1</span>
<span id="L337" class="LineNr">337 </span> <span class="Identifier">break</span>-<span class="Normal">if</span> <span class="Constant">3</span>:<span class="Normal">bool</span>
<span id="L338" class="LineNr">338 </span><span class="Comment"># $print 1:num</span>
<span id="L339" class="LineNr">339 </span> <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>multiply <span class="Constant">2</span>:num<span class="Delimiter">,</span> <span class="Constant">1</span>:num
<span id="L340" class="LineNr">340 </span> <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>subtract <span class="Constant">1</span>:num<span class="Delimiter">,</span> <span class="Constant">1</span>
<span id="L341" class="LineNr">341 </span> loop
<span id="L342" class="LineNr">342 </span> <span class="Delimiter">}</span>
<span id="L343" class="LineNr">343 </span> <span class="Constant">4</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">2</span>:num <span class="Comment"># trigger a read</span>
<span id="L344" class="LineNr">344 </span>]
<span id="L345" class="LineNr">345 </span><span class="traceContains">+mem: location 2 is 120</span>
<span id="L346" class="LineNr">346 </span>
<span id="L347" class="LineNr">347 </span><span class="Delimiter">:(scenario break_outside_braces_fails)</span>
<span id="L348" class="LineNr">348 </span><span class="Special">% Hide_errors = true;</span>
<span id="L349" class="LineNr">349 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
<span id="L350" class="LineNr">350 </span> <span class="Identifier">break</span>
<span id="L351" class="LineNr">351 </span>]
<span id="L352" class="LineNr">352 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: 'break' needs a '{' before</span>
<span id="L353" class="LineNr">353 </span>
<span id="L354" class="LineNr">354 </span><span class="Delimiter">:(scenario break_conditional_without_ingredient_fails)</span>
<span id="L355" class="LineNr">355 </span><span class="Special">% Hide_errors = true;</span>
<span id="L356" class="LineNr">356 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
<span id="L357" class="LineNr">357 </span> <span class="Delimiter">{</span>
<span id="L358" class="LineNr">358 </span> <span class="Identifier">break</span>-<span class="Normal">if</span>
<span id="L359" class="LineNr">359 </span> <span class="Delimiter">}</span>
<span id="L360" class="LineNr">360 </span>]
<span id="L361" class="LineNr">361 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: 'break-if' expects 1 or 2 ingredients, but got none</span>
<span id="L362" class="LineNr">362 </span>
<span id="L363" class="LineNr">363 </span><span class="Comment">//: Using break we can now implement conditional returns.</span>
<span id="L364" class="LineNr">364 </span>
<span id="L365" class="LineNr">365 </span><span class="Delimiter">:(scenario return_if)</span>
<span id="L366" class="LineNr">366 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
<span id="L367" class="LineNr">367 </span> <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>test1
<span id="L368" class="LineNr">368 </span>]
<span id="L369" class="LineNr">369 </span><span class="muRecipe">def</span> test1 [
<span id="L370" class="LineNr">370 </span> <span class="Identifier">return</span>-<span class="Normal">if</span> <span class="Constant">0</span><span class="Delimiter">,</span> <span class="Constant">34</span>
<span id="L371" class="LineNr">371 </span> <span class="Identifier">return</span> <span class="Constant">35</span>
<span id="L372" class="LineNr">372 </span>]
<span id="L373" class="LineNr">373 </span><span class="traceContains">+mem: storing 35 in location 1</span>
<span id="L374" class="LineNr">374 </span>
<span id="L375" class="LineNr">375 </span><span class="Delimiter">:(scenario return_if_2)</span>
<span id="L376" class="LineNr">376 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
<span id="L377" class="LineNr">377 </span> <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>test1
<span id="L378" class="LineNr">378 </span>]
<span id="L379" class="LineNr">379 </span><span class="muRecipe">def</span> test1 [
<span id="L380" class="LineNr">380 </span> <span class="Identifier">return</span>-<span class="Normal">if</span> <span class="Constant">1</span><span class="Delimiter">,</span> <span class="Constant">34</span>
<span id="L381" class="LineNr">381 </span> <span class="Identifier">return</span> <span class="Constant">35</span>
<span id="L382" class="LineNr">382 </span>]
<span id="L383" class="LineNr">383 </span><span class="traceContains">+mem: storing 34 in location 1</span>
<span id="L384" class="LineNr">384 </span>
<span id="L385" class="LineNr">385 </span><span class="Delimiter">:(before &quot;End Rewrite Instruction(curr, <a href='010vm.cc.html#L19'>recipe</a> result)&quot;)</span>
<span id="L386" class="LineNr">386 </span><span class="Comment">// rewrite 'return-if a, b, c, ...' to</span>
<span id="L387" class="LineNr">387 </span><span class="Comment">// ```</span>
<span id="L388" class="LineNr">388 </span><span class="Comment">// {</span>
<span id="L389" class="LineNr">389 </span><span class="Comment">// break-unless a</span>
<span id="L390" class="LineNr">390 </span><span class="Comment">// return b, c, ...</span>
<span id="L391" class="LineNr">391 </span><span class="Comment">// }</span>
<span id="L392" class="LineNr">392 </span><span class="Comment">// ```</span>
<span id="L393" class="LineNr">393 </span><span class="Normal">if</span> <span class="Delimiter">(</span>curr<span class="Delimiter">.</span>name == <span class="Constant">&quot;return-if&quot;</span> || curr<span class="Delimiter">.</span>name == <span class="Constant">&quot;reply-if&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L394" class="LineNr">394 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>curr<span class="Delimiter">.</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
<span id="L395" class="LineNr">395 </span> <a href='040brace.cc.html#L420'>emit_return_block</a><span class="Delimiter">(</span>result<span class="Delimiter">,</span> <span class="Constant">&quot;break-unless&quot;</span><span class="Delimiter">,</span> curr<span class="Delimiter">);</span>
<span id="L396" class="LineNr">396 </span> curr<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
<span id="L397" class="LineNr">397 </span> <span class="Delimiter">}</span>
<span id="L398" class="LineNr">398 </span> <span class="Normal">else</span> <span class="Delimiter">{</span>
<span id="L399" class="LineNr">399 </span> <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; curr<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;' never yields any products\n&quot;</span> &lt;&lt; <a href='003trace.cc.html#L225'>end</a><span class="Delimiter">();</span>
<span id="L400" class="LineNr">400 </span> <span class="Delimiter">}</span>
<span id="L401" class="LineNr">401 </span><span class="Delimiter">}</span>
<span id="L402" class="LineNr">402 </span><span class="Comment">// rewrite 'return-unless a, b, c, ...' to</span>
<span id="L403" class="LineNr">403 </span><span class="Comment">// ```</span>
<span id="L404" class="LineNr">404 </span><span class="Comment">// {</span>
<span id="L405" class="LineNr">405 </span><span class="Comment">// break-if a</span>
<span id="L406" class="LineNr">406 </span><span class="Comment">// return b, c, ...</span>
<span id="L407" class="LineNr">407 </span><span class="Comment">// }</span>
<span id="L408" class="LineNr">408 </span><span class="Comment">// ```</span>
<span id="L409" class="LineNr">409 </span><span class="Normal">if</span> <span class="Delimiter">(</span>curr<span class="Delimiter">.</span>name == <span class="Constant">&quot;return-unless&quot;</span> || curr<span class="Delimiter">.</span>name == <span class="Constant">&quot;reply-unless&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L410" class="LineNr">410 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>curr<span class="Delimiter">.</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
<span id="L411" class="LineNr">411 </span> <a href='040brace.cc.html#L420'>emit_return_block</a><span class="Delimiter">(</span>result<span class="Delimiter">,</span> <span class="Constant">&quot;break-if&quot;</span><span class="Delimiter">,</span> curr<span class="Delimiter">);</span>
<span id="L412" class="LineNr">412 </span> curr<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
<span id="L413" class="LineNr">413 </span> <span class="Delimiter">}</span>
<span id="L414" class="LineNr">414 </span> <span class="Normal">else</span> <span class="Delimiter">{</span>
<span id="L415" class="LineNr">415 </span> <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; curr<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;' never yields any products\n&quot;</span> &lt;&lt; <a href='003trace.cc.html#L225'>end</a><span class="Delimiter">();</span>
<span id="L416" class="LineNr">416 </span> <span class="Delimiter">}</span>
<span id="L417" class="LineNr">417 </span><span class="Delimiter">}</span>
<span id="L418" class="LineNr">418 </span>
<span id="L419" class="LineNr">419 </span><span class="Delimiter">:(code)</span>
<span id="L420" class="LineNr">420 </span><span class="Normal">void</span> <a href='040brace.cc.html#L420'>emit_return_block</a><span class="Delimiter">(</span>recipe&amp; out<span class="Delimiter">,</span> <span class="Normal">const</span> string&amp; break_command<span class="Delimiter">,</span> <span class="Normal">const</span> instruction&amp; inst<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L421" class="LineNr">421 </span> <span class="Normal">const</span> vector&lt;reagent&gt;&amp; ingredients = inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">;</span>
<span id="L422" class="LineNr">422 </span> reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> condition = ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
<span id="L423" class="LineNr">423 </span> vector&lt;reagent&gt; return_ingredients<span class="Delimiter">;</span>
<span id="L424" class="LineNr">424 </span> copy<span class="Delimiter">(</span>++ingredients<span class="Delimiter">.</span>begin<span class="Delimiter">(),</span> ingredients<span class="Delimiter">.</span><a href='003trace.cc.html#L225'>end</a><span class="Delimiter">(),</span> inserter<span class="Delimiter">(</span>return_ingredients<span class="Delimiter">,</span> return_ingredients<span class="Delimiter">.</span><a href='003trace.cc.html#L225'>end</a><span class="Delimiter">()));</span>
<span id="L425" class="LineNr">425 </span>
<span id="L426" class="LineNr">426 </span> <span class="Comment">// {</span>
<span id="L427" class="LineNr">427 </span> <a href='010vm.cc.html#L33'>instruction</a> open_label<span class="Delimiter">;</span> open_label<span class="Delimiter">.</span>is_label=<span class="Constant">true</span><span class="Delimiter">;</span> open_label<span class="Delimiter">.</span>label = <span class="Constant">&quot;{&quot;</span><span class="Delimiter">;</span>
<span id="L428" class="LineNr">428 </span> out<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>open_label<span class="Delimiter">);</span>
<span id="L429" class="LineNr">429 </span>
<span id="L430" class="LineNr">430 </span> <span class="Comment">// &lt;break command&gt; &lt;condition&gt;</span>
<span id="L431" class="LineNr">431 </span> <a href='010vm.cc.html#L33'>instruction</a> break_inst<span class="Delimiter">;</span>
<span id="L432" class="LineNr">432 </span> break_inst<span class="Delimiter">.</span>operation = get<span class="Delimiter">(</span><span class="Special">Recipe_ordinal</span><span class="Delimiter">,</span> break_command<span class="Delimiter">);</span>
<span id="L433" class="LineNr">433 </span> break_inst<span class="Delimiter">.</span>name = break_command<span class="Delimiter">;</span>
<span id="L434" class="LineNr">434 </span> break_inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>condition<span class="Delimiter">);</span>
<span id="L435" class="LineNr">435 </span> out<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>break_inst<span class="Delimiter">);</span>
<span id="L436" class="LineNr">436 </span>
<span id="L437" class="LineNr">437 </span> <span class="Comment">// return &lt;return ingredients&gt;</span>
<span id="L438" class="LineNr">438 </span> <a href='010vm.cc.html#L33'>instruction</a> return_inst<span class="Delimiter">;</span>
<span id="L439" class="LineNr">439 </span> return_inst<span class="Delimiter">.</span>operation = get<span class="Delimiter">(</span><span class="Special">Recipe_ordinal</span><span class="Delimiter">,</span> <span class="Constant">&quot;return&quot;</span><span class="Delimiter">);</span>
<span id="L440" class="LineNr">440 </span> return_inst<span class="Delimiter">.</span>name = <span class="Constant">&quot;return&quot;</span><span class="Delimiter">;</span>
<span id="L441" class="LineNr">441 </span> return_inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>swap<span class="Delimiter">(</span>return_ingredients<span class="Delimiter">);</span>
<span id="L442" class="LineNr">442 </span> return_inst<span class="Delimiter">.</span>original_string = inst<span class="Delimiter">.</span>original_string<span class="Delimiter">;</span>
<span id="L443" class="LineNr">443 </span> out<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>return_inst<span class="Delimiter">);</span>
<span id="L444" class="LineNr">444 </span>
<span id="L445" class="LineNr">445 </span> <span class="Comment">// }</span>
<span id="L446" class="LineNr">446 </span> <a href='010vm.cc.html#L33'>instruction</a> close_label<span class="Delimiter">;</span> close_label<span class="Delimiter">.</span>is_label=<span class="Constant">true</span><span class="Delimiter">;</span> close_label<span class="Delimiter">.</span>label = <span class="Constant">&quot;}&quot;</span><span class="Delimiter">;</span>
<span id="L447" class="LineNr">447 </span> out<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>close_label<span class="Delimiter">);</span>
<span id="L448" class="LineNr">448 </span><span class="Delimiter">}</span>
<span id="L449" class="LineNr">449 </span>
<span id="L450" class="LineNr">450 </span><span class="Comment">//: Make sure these pseudo recipes get consistent numbers in all tests, even</span>
<span id="L451" class="LineNr">451 </span><span class="Comment">//: though they aren't implemented. Allows greater flexibility in ordering</span>
<span id="L452" class="LineNr">452 </span><span class="Comment">//: transforms.</span>
<span id="L453" class="LineNr">453 </span>
<span id="L454" class="LineNr">454 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
<span id="L455" class="LineNr">455 </span>BREAK<span class="Delimiter">,</span>
<span id="L456" class="LineNr">456 </span>BREAK_IF<span class="Delimiter">,</span>
<span id="L457" class="LineNr">457 </span>BREAK_UNLESS<span class="Delimiter">,</span>
<span id="L458" class="LineNr">458 </span>LOOP<span class="Delimiter">,</span>
<span id="L459" class="LineNr">459 </span>LOOP_IF<span class="Delimiter">,</span>
<span id="L460" class="LineNr">460 </span>LOOP_UNLESS<span class="Delimiter">,</span>
<span id="L461" class="LineNr">461 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
<span id="L462" class="LineNr">462 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span><span class="Special">Recipe_ordinal</span><span class="Delimiter">,</span> <span class="Constant">&quot;break&quot;</span><span class="Delimiter">,</span> BREAK<span class="Delimiter">);</span>
<span id="L463" class="LineNr">463 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span><span class="Special">Recipe_ordinal</span><span class="Delimiter">,</span> <span class="Constant">&quot;break-if&quot;</span><span class="Delimiter">,</span> BREAK_IF<span class="Delimiter">);</span>
<span id="L464" class="LineNr">464 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span><span class="Special">Recipe_ordinal</span><span class="Delimiter">,</span> <span class="Constant">&quot;break-unless&quot;</span><span class="Delimiter">,</span> BREAK_UNLESS<span class="Delimiter">);</span>
<span id="L465" class="LineNr">465 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span><span class="Special">Recipe_ordinal</span><span class="Delimiter">,</span> <span class="Constant">&quot;loop&quot;</span><span class="Delimiter">,</span> LOOP<span class="Delimiter">);</span>
<span id="L466" class="LineNr">466 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span><span class="Special">Recipe_ordinal</span><span class="Delimiter">,</span> <span class="Constant">&quot;loop-if&quot;</span><span class="Delimiter">,</span> LOOP_IF<span class="Delimiter">);</span>
<span id="L467" class="LineNr">467 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span><span class="Special">Recipe_ordinal</span><span class="Delimiter">,</span> <span class="Constant">&quot;loop-unless&quot;</span><span class="Delimiter">,</span> LOOP_UNLESS<span class="Delimiter">);</span>
<span id="L468" class="LineNr">468 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
<span id="L469" class="LineNr">469 </span><span class="Normal">case</span> BREAK: <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L470" class="LineNr">470 </span><span class="Normal">case</span> BREAK_IF: <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L471" class="LineNr">471 </span><span class="Normal">case</span> BREAK_UNLESS: <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L472" class="LineNr">472 </span><span class="Normal">case</span> LOOP: <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L473" class="LineNr">473 </span><span class="Normal">case</span> LOOP_IF: <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L474" class="LineNr">474 </span><span class="Normal">case</span> LOOP_UNLESS: <span class="Identifier">break</span><span class="Delimiter">;</span>
</pre>
</body>
</html>
<!-- vim: set foldmethod=manual : -->