4134 - 'input' = 'ingredient'

This commit is contained in:
Kartik K. Agaram 2017-12-03 23:25:40 -08:00
parent ef7d834fdd
commit 4a48bedcd1
139 changed files with 1517 additions and 1449 deletions

View File

@ -40,6 +40,7 @@ for (int i = 0; i < SIZE(ingredients); ++i) {
NEXT_INGREDIENT,
:(before "End Primitive Recipe Numbers")
put(Recipe_ordinal, "next-ingredient", NEXT_INGREDIENT);
put(Recipe_ordinal, "next-input", NEXT_INGREDIENT);
:(before "End Primitive Recipe Checks")
case NEXT_INGREDIENT: {
if (!inst.ingredients.empty()) {
@ -112,6 +113,7 @@ def f [
REWIND_INGREDIENTS,
:(before "End Primitive Recipe Numbers")
put(Recipe_ordinal, "rewind-ingredients", REWIND_INGREDIENTS);
put(Recipe_ordinal, "rewind-inputs", REWIND_INGREDIENTS);
:(before "End Primitive Recipe Checks")
case REWIND_INGREDIENTS: {
break;
@ -137,6 +139,7 @@ def f [
INGREDIENT,
:(before "End Primitive Recipe Numbers")
put(Recipe_ordinal, "ingredient", INGREDIENT);
put(Recipe_ordinal, "input", INGREDIENT);
:(before "End Primitive Recipe Checks")
case INGREDIENT: {
if (SIZE(inst.ingredients) != 1) {

View File

@ -29,6 +29,7 @@ RETURN,
:(before "End Primitive Recipe Numbers")
put(Recipe_ordinal, "return", RETURN);
put(Recipe_ordinal, "reply", RETURN); // synonym while teaching
put(Recipe_ordinal, "output", RETURN); // experiment
:(before "End Primitive Recipe Checks")
case RETURN: {
break; // checks will be performed by a transform below

View File

@ -176,7 +176,7 @@ for (long int i = 0; i < SIZE(caller.products); ++i)
//: Rewrite 'load-ingredients' to instructions to create all reagents in the header.
:(before "End Rewrite Instruction(curr, recipe result)")
if (curr.name == "load-ingredients") {
if (curr.name == "load-ingredients" || curr.name == "load-inputs") {
curr.clear();
recipe_ordinal op = get(Recipe_ordinal, "next-ingredient-without-typechecking");
for (int i = 0; i < SIZE(result.ingredients); ++i) {

View File

@ -8,14 +8,14 @@
# define it to be identical to 'to-text' by default
def to-text-line x:_elem -> y:text [
local-scope
load-ingredients
load-inputs
y <- to-text x
]
# variant for arrays (since we can't pass them around otherwise)
def array-to-text-line x:&:@:_elem -> y:text [
local-scope
load-ingredients
load-inputs
y <- to-text *x
]
@ -33,7 +33,7 @@ scenario array-to-text-line-early-warning-for-static-dispatch [
# finally, a specialization for single characters
def to-text c:char -> y:text [
local-scope
load-ingredients
load-inputs
y <- new character:type, 1/capacity
*y <- put-index *y, 0, c
]

View File

@ -2,7 +2,7 @@
def equal a:text, b:text -> result:bool [
local-scope
load-ingredients
load-inputs
an:num, bn:num <- copy a, b
address-equal?:boolean <- equal an, bn
return-if address-equal?, 1/true
@ -124,7 +124,7 @@ container buffer:_elem [
def new-buffer capacity:num -> result:&:buffer:_elem [
local-scope
load-ingredients
load-inputs
result <- new {(buffer _elem): type}
*result <- put *result, length:offset, 0
{
@ -139,7 +139,7 @@ def new-buffer capacity:num -> result:&:buffer:_elem [
def grow-buffer buf:&:buffer:_elem -> buf:&:buffer:_elem [
local-scope
load-ingredients
load-inputs
# double buffer size
olddata:&:@:_elem <- get *buf, data:offset
oldlen:num <- length *olddata
@ -160,7 +160,7 @@ def grow-buffer buf:&:buffer:_elem -> buf:&:buffer:_elem [
def buffer-full? in:&:buffer:_elem -> result:bool [
local-scope
load-ingredients
load-inputs
len:num <- get *in, length:offset
s:&:@:_elem <- get *in, data:offset
capacity:num <- length *s
@ -170,7 +170,7 @@ def buffer-full? in:&:buffer:_elem -> result:bool [
# most broadly applicable definition of append to a buffer
def append buf:&:buffer:_elem, x:_elem -> buf:&:buffer:_elem [
local-scope
load-ingredients
load-inputs
len:num <- get *buf, length:offset
{
# grow buffer if necessary
@ -188,7 +188,7 @@ def append buf:&:buffer:_elem, x:_elem -> buf:&:buffer:_elem [
# call to-text
def append buf:&:buffer:char, x:_elem -> buf:&:buffer:char [
local-scope
load-ingredients
load-inputs
text:text <- to-text x
buf <- append buf, text
]
@ -196,7 +196,7 @@ def append buf:&:buffer:char, x:_elem -> buf:&:buffer:char [
# specialization for characters that is backspace-aware
def append buf:&:buffer:char, c:char -> buf:&:buffer:char [
local-scope
load-ingredients
load-inputs
len:num <- get *buf, length:offset
{
# backspace? just drop last character if it exists and return
@ -222,7 +222,7 @@ def append buf:&:buffer:char, c:char -> buf:&:buffer:char [
def append buf:&:buffer:_elem, t:&:@:_elem -> buf:&:buffer:_elem [
local-scope
load-ingredients
load-inputs
len:num <- length *t
i:num <- copy 0
{
@ -337,7 +337,7 @@ scenario append-to-buffer-of-non-characters [
def buffer-to-array in:&:buffer:_elem -> result:&:@:_elem [
local-scope
load-ingredients
load-inputs
# propagate null buffer
return-unless in, 0
len:num <- get *in, length:offset
@ -357,7 +357,7 @@ def buffer-to-array in:&:buffer:_elem -> result:&:@:_elem [
def blank? x:&:@:_elem -> result:bool [
local-scope
load-ingredients
load-inputs
return-unless x, 1/true
len:num <- length *x
result <- equal len, 0
@ -373,16 +373,16 @@ def blank? x:&:@:_elem -> result:bool [
# will never ever get used.
def append first:text -> result:text [
local-scope
load-ingredients
load-inputs
buf:&:buffer:char <- new-buffer 30
# append first ingredient
# append first input
{
break-unless first
buf <- append buf, first
}
# append remaining ingredients
# append remaining inputs
{
arg:text, arg-found?:bool <- next-ingredient
arg:text, arg-found?:bool <- next-input
break-unless arg-found?
loop-unless arg
buf <- append buf, arg
@ -458,7 +458,7 @@ scenario replace-character-in-text [
def replace s:text, oldc:char, newc:char, from:num/optional -> s:text [
local-scope
load-ingredients
load-inputs
len:num <- length *s
i:num <- find-next s, oldc, from
done?:bool <- greater-or-equal i, len
@ -519,13 +519,13 @@ scenario replace-all-characters [
# replace underscores in first with remaining args
def interpolate template:text -> result:text [
local-scope
load-ingredients # consume just the template
load-inputs # consume just the template
# compute result-len, space to allocate for result
tem-len:num <- length *template
result-len:num <- copy tem-len
{
# while ingredients remain
a:text, arg-received?:bool <- next-ingredient
# while inputs remain
a:text, arg-received?:bool <- next-input
break-unless arg-received?
# result-len = result-len + arg.length - 1 (for the 'underscore' being replaced)
a-len:num <- length *a
@ -533,15 +533,15 @@ def interpolate template:text -> result:text [
result-len <- subtract result-len, 1
loop
}
rewind-ingredients
_ <- next-ingredient # skip template
rewind-inputs
_ <- next-input # skip template
result <- new character:type, result-len
# repeatedly copy sections of template and 'holes' into result
result-idx:num <- copy 0
i:num <- copy 0
{
# while arg received
a:text, arg-received?:bool <- next-ingredient
a:text, arg-received?:bool <- next-input
break-unless arg-received?
# copy template into result until '_'
{
@ -633,7 +633,7 @@ scenario interpolate-at-end [
# result:bool <- space? c:char
def space? c:char -> result:bool [
local-scope
load-ingredients
load-inputs
# most common case first
result <- equal c, 32/space
return-if result
@ -694,7 +694,7 @@ def space? c:char -> result:bool [
def trim s:text -> result:text [
local-scope
load-ingredients
load-inputs
len:num <- length *s
# left trim: compute start
start:num <- copy 0
@ -804,7 +804,7 @@ scenario trim-newline-tab [
def find-next text:text, pattern:char, idx:num -> next-index:num [
local-scope
load-ingredients
load-inputs
len:num <- length *text
{
eof?:bool <- greater-or-equal idx, len
@ -910,7 +910,7 @@ scenario text-find-next-second [
# fairly dumb algorithm
def find-next text:text, pattern:text, idx:num -> next-index:num [
local-scope
load-ingredients
load-inputs
first:char <- index *pattern, 0
# repeatedly check for match at current idx
len:num <- length *text
@ -991,7 +991,7 @@ scenario find-next-suffix-match-2 [
# checks if pattern matches at index 'idx'
def match-at text:text, pattern:text, idx:num -> result:bool [
local-scope
load-ingredients
load-inputs
pattern-len:num <- length *pattern
# check that there's space left for the pattern
x:num <- length *text
@ -1122,7 +1122,7 @@ scenario match-at-inside-bounds-2 [
def split s:text, delim:char -> result:&:@:text [
local-scope
load-ingredients
load-inputs
# empty text? return empty array
len:num <- length *s
{
@ -1254,7 +1254,7 @@ scenario text-split-empty-piece [
def split-first text:text, delim:char -> x:text, y:text [
local-scope
load-ingredients
load-inputs
# empty text? return empty texts
len:num <- length *text
{
@ -1286,7 +1286,7 @@ scenario text-split-first [
def copy-range buf:text, start:num, end:num -> result:text [
local-scope
load-ingredients
load-inputs
# if end is out of bounds, trim it
len:num <- length *buf
end:num <- min len, end
@ -1345,7 +1345,7 @@ scenario copy-range-out-of-bounds-2 [
def parse-whole-number in:text -> out:num, error?:bool [
local-scope
load-ingredients
load-inputs
out <- copy 0
result:num <- copy 0 # temporary location
i:num <- copy 0
@ -1369,7 +1369,7 @@ def parse-whole-number in:text -> out:num, error?:bool [
# (contributed by Ella Couch)
recipe character-code-to-digit character-code:number -> result:number, error?:boolean [
local-scope
load-ingredients
load-inputs
result <- copy 0
error? <- lesser-than character-code, 48 # '0'
return-if error?

View File

@ -18,20 +18,20 @@ def new-array -> result:&:@:_elem [
capacity:num <- copy 0
{
# while read curr-value
curr-value:_elem, exists?:bool <- next-ingredient
curr-value:_elem, exists?:bool <- next-input
break-unless exists?
capacity <- add capacity, 1
loop
}
result <- new _elem:type, capacity
rewind-ingredients
rewind-inputs
i:num <- copy 0
{
# while read curr-value
done?:bool <- greater-or-equal i, capacity
break-if done?
curr-value:_elem, exists?:bool <- next-ingredient
assert exists?, [error in rewinding ingredients to new-array]
curr-value:_elem, exists?:bool <- next-input
assert exists?, [error in rewinding inputs to new-array]
*result <- put-index *result, i, curr-value
i <- add i, 1
loop
@ -43,13 +43,13 @@ def new-array -> result:&:@:_elem [
# (contributed by Caleb Couch)
def fill array:&:@:num -> array:&:@:num [
local-scope
load-ingredients
load-inputs
loopn:num <- copy 0
length:num <- length *array
{
length?:bool <- equal loopn, length
break-if length?
object:num, arg-received?:bool <- next-ingredient
object:num, arg-received?:bool <- next-input
break-unless arg-received?
*array <- put-index *array, loopn, object
loopn <- add loopn, 1
@ -88,7 +88,7 @@ scenario fill-overwrites-existing-values [
]
]
scenario fill-exits-gracefully-when-given-no-ingredients [
scenario fill-exits-gracefully-when-given-no-inputs [
local-scope
array:&:@:num <- new number:type, 3
run [
@ -107,7 +107,7 @@ scenario fill-exits-gracefully-when-given-no-ingredients [
# (contributed by Caleb Couch)
def swap array:&:@:num, index1:num, index2:num -> array:&:@:num [
local-scope
load-ingredients
load-inputs
object1:num <- index *array, index1
object2:num <- index *array, index2
*array <- put-index *array, index1, object2
@ -133,7 +133,7 @@ scenario swap-works [
# (contributed by Caleb Couch)
def reverse array:&:@:_elem -> array:&:@:_elem [
local-scope
load-ingredients
load-inputs
start:num <- copy 0
length:num <- length *array
end:num <- subtract length, 1

View File

@ -10,20 +10,20 @@ container list:_elem [
def push x:_elem, l:&:list:_elem -> result:&:list:_elem/contained-in:l [
local-scope
load-ingredients
load-inputs
result <- new {(list _elem): type}
*result <- merge x, l
]
def first in:&:list:_elem -> result:_elem [
local-scope
load-ingredients
load-inputs
result <- get *in, value:offset
]
def rest in:&:list:_elem -> result:&:list:_elem/contained-in:in [
local-scope
load-ingredients
load-inputs
result <- get *in, next:offset
]
@ -50,7 +50,7 @@ scenario list-handling [
def length l:&:list:_elem -> result:num [
local-scope
load-ingredients
load-inputs
result <- copy 0
{
break-unless l
@ -63,7 +63,7 @@ def length l:&:list:_elem -> result:num [
# insert 'x' after 'in'
def insert x:_elem, in:&:list:_elem -> in:&:list:_elem [
local-scope
load-ingredients
load-inputs
new-node:&:list:_elem <- new {(list _elem): type}
*new-node <- put *new-node, value:offset, x
next-node:&:list:_elem <- get *in, next:offset
@ -155,7 +155,7 @@ scenario inserting-after-start-of-list [
# pointers to the head are now invalid.
def remove x:&:list:_elem/contained-in:in, in:&:list:_elem -> in:&:list:_elem [
local-scope
load-ingredients
load-inputs
# if 'x' is null, return
return-unless x
next-node:&:list:_elem <- rest x
@ -265,7 +265,7 @@ scenario removing-from-singleton-list [
# (contributed by Caleb Couch)
def reverse list:&:list:_elem temp:&:list:_elem/contained-in:result -> result:&:list:_elem [
local-scope
load-ingredients
load-inputs
return-unless list, temp
object:_elem <- first, list
list <- rest list
@ -304,7 +304,7 @@ scenario stash-list [
def to-text in:&:list:_elem -> result:text [
local-scope
load-ingredients
load-inputs
buf:&:buffer:char <- new-buffer 80
buf <- to-buffer in, buf
result <- buffer-to-array buf
@ -313,7 +313,7 @@ def to-text in:&:list:_elem -> result:text [
# variant of 'to-text' which stops printing after a few elements (and so is robust to cycles)
def to-text-line in:&:list:_elem -> result:text [
local-scope
load-ingredients
load-inputs
buf:&:buffer:char <- new-buffer 80
buf <- to-buffer in, buf, 6 # max elements to display
result <- buffer-to-array buf
@ -321,7 +321,7 @@ def to-text-line in:&:list:_elem -> result:text [
def to-buffer in:&:list:_elem, buf:&:buffer:char -> buf:&:buffer:char [
local-scope
load-ingredients
load-inputs
{
break-if in
buf <- append buf, [[]]
@ -336,9 +336,9 @@ def to-buffer in:&:list:_elem, buf:&:buffer:char -> buf:&:buffer:char [
return-unless next
buf <- append buf, [ -> ]
# and recurse
remaining:num, optional-ingredient-found?:bool <- next-ingredient
remaining:num, optional-input-found?:bool <- next-input
{
break-if optional-ingredient-found?
break-if optional-input-found?
# unlimited recursion
buf <- to-buffer next, buf
return

View File

@ -8,7 +8,7 @@ container duplex-list:_elem [
def push x:_elem, in:&:duplex-list:_elem/contained-in:result -> result:&:duplex-list:_elem [
local-scope
load-ingredients
load-inputs
result:&:duplex-list:_elem <- new {(duplex-list _elem): type}
*result <- merge x, in, 0
return-unless in
@ -17,21 +17,21 @@ def push x:_elem, in:&:duplex-list:_elem/contained-in:result -> result:&:duplex-
def first in:&:duplex-list:_elem -> result:_elem [
local-scope
load-ingredients
load-inputs
return-unless in, 0
result <- get *in, value:offset
]
def next in:&:duplex-list:_elem -> result:&:duplex-list:_elem/contained-in:in [
local-scope
load-ingredients
load-inputs
return-unless in, 0
result <- get *in, next:offset
]
def prev in:&:duplex-list:_elem -> result:&:duplex-list:_elem/contained-in:in [
local-scope
load-ingredients
load-inputs
return-unless in, 0
result <- get *in, prev:offset
return result
@ -81,7 +81,7 @@ scenario duplex-list-handling [
def length l:&:duplex-list:_elem -> result:num [
local-scope
load-ingredients
load-inputs
result <- copy 0
{
break-unless l
@ -94,7 +94,7 @@ def length l:&:duplex-list:_elem -> result:num [
# insert 'x' after 'in'
def insert x:_elem, in:&:duplex-list:_elem -> in:&:duplex-list:_elem [
local-scope
load-ingredients
load-inputs
new-node:&:duplex-list:_elem <- new {(duplex-list _elem): type}
*new-node <- put *new-node, value:offset, x
# save old next before changing it
@ -223,7 +223,7 @@ scenario inserting-after-start-of-duplex-list [
# pointers to the head are now invalid.
def remove x:&:duplex-list:_elem/contained-in:in, in:&:duplex-list:_elem -> in:&:duplex-list:_elem [
local-scope
load-ingredients
load-inputs
# if 'x' is null, return
return-unless x
next-node:&:duplex-list:_elem <- get *x, next:offset
@ -347,7 +347,7 @@ scenario removing-from-singleton-duplex-list [
def remove x:&:duplex-list:_elem/contained-in:in, n:num, in:&:duplex-list:_elem -> in:&:duplex-list:_elem [
local-scope
load-ingredients
load-inputs
i:num <- copy 0
curr:&:duplex-list:_elem <- copy x
{
@ -384,7 +384,7 @@ scenario removing-multiple-from-duplex-list [
# clean way to return the new head pointer.
def remove-between start:&:duplex-list:_elem, end:&:duplex-list:_elem/contained-in:start -> start:&:duplex-list:_elem [
local-scope
load-ingredients
load-inputs
next:&:duplex-list:_elem <- get *start, next:offset
nothing-to-delete?:bool <- equal next, end
return-if nothing-to-delete?
@ -524,7 +524,7 @@ scenario remove-range-to-end [
# insert list beginning at 'start' after 'in'
def splice in:&:duplex-list:_elem, start:&:duplex-list:_elem/contained-in:in -> in:&:duplex-list:_elem [
local-scope
load-ingredients
load-inputs
return-unless in
return-unless start
end:&:duplex-list:_elem <- last start
@ -541,7 +541,7 @@ def splice in:&:duplex-list:_elem, start:&:duplex-list:_elem/contained-in:in ->
# insert contents of 'new' after 'in'
def insert in:&:duplex-list:_elem, new:&:@:_elem -> in:&:duplex-list:_elem [
local-scope
load-ingredients
load-inputs
return-unless in
return-unless new
len:num <- length *new
@ -562,7 +562,7 @@ def insert in:&:duplex-list:_elem, new:&:@:_elem -> in:&:duplex-list:_elem [
def append in:&:duplex-list:_elem, new:&:duplex-list:_elem/contained-in:in -> in:&:duplex-list:_elem [
local-scope
load-ingredients
load-inputs
last:&:duplex-list:_elem <- last in
*last <- put *last, next:offset, new
return-unless new
@ -571,7 +571,7 @@ def append in:&:duplex-list:_elem, new:&:duplex-list:_elem/contained-in:in -> in
def last in:&:duplex-list:_elem -> result:&:duplex-list:_elem [
local-scope
load-ingredients
load-inputs
result <- copy in
{
next:&:duplex-list:_elem <- next result
@ -584,7 +584,7 @@ def last in:&:duplex-list:_elem -> result:&:duplex-list:_elem [
# does a duplex list start with a certain sequence of elements?
def match x:&:duplex-list:_elem, y:&:@:_elem -> result:bool [
local-scope
load-ingredients
load-inputs
i:num <- copy 0
max:num <- length *y
{
@ -629,7 +629,7 @@ scenario duplex-list-match [
# helper for debugging
def dump-from x:&:duplex-list:_elem [
local-scope
load-ingredients
load-inputs
$print x, [: ]
{
break-unless x
@ -662,7 +662,7 @@ scenario stash-duplex-list [
def to-text in:&:duplex-list:_elem -> result:text [
local-scope
load-ingredients
load-inputs
buf:&:buffer:char <- new-buffer 80
buf <- to-buffer in, buf
result <- buffer-to-array buf
@ -671,7 +671,7 @@ def to-text in:&:duplex-list:_elem -> result:text [
# variant of 'to-text' which stops printing after a few elements (and so is robust to cycles)
def to-text-line in:&:duplex-list:_elem -> result:text [
local-scope
load-ingredients
load-inputs
buf:&:buffer:char <- new-buffer 80
buf <- to-buffer in, buf, 6 # max elements to display
result <- buffer-to-array buf
@ -679,7 +679,7 @@ def to-text-line in:&:duplex-list:_elem -> result:text [
def to-buffer in:&:duplex-list:_elem, buf:&:buffer:char -> buf:&:buffer:char [
local-scope
load-ingredients
load-inputs
{
break-if in
buf <- append buf, [[]]
@ -694,9 +694,9 @@ def to-buffer in:&:duplex-list:_elem, buf:&:buffer:char -> buf:&:buffer:char [
return-unless next
buf <- append buf, [ <-> ]
# and recurse
remaining:num, optional-ingredient-found?:bool <- next-ingredient
remaining:num, optional-input-found?:bool <- next-input
{
break-if optional-ingredient-found?
break-if optional-input-found?
# unlimited recursion
buf <- to-buffer next, buf
return

View File

@ -6,7 +6,7 @@ container stream:_elem [
def new-stream s:&:@:_elem -> result:&:stream:_elem [
local-scope
load-ingredients
load-inputs
return-unless s, 0/null
result <- new {(stream _elem): type}
*result <- put *result, index:offset, 0
@ -15,14 +15,14 @@ def new-stream s:&:@:_elem -> result:&:stream:_elem [
def rewind in:&:stream:_elem -> in:&:stream:_elem [
local-scope
load-ingredients
load-inputs
return-unless in
*in <- put *in, index:offset, 0
]
def read in:&:stream:_elem -> result:_elem, empty?:bool, in:&:stream:_elem [
local-scope
load-ingredients
load-inputs
assert in, [cannot read; stream has no data]
empty? <- copy 0/false
idx:num <- get *in, index:offset
@ -41,7 +41,7 @@ def read in:&:stream:_elem -> result:_elem, empty?:bool, in:&:stream:_elem [
def peek in:&:stream:_elem -> result:_elem, empty?:bool [
local-scope
load-ingredients
load-inputs
assert in, [cannot peek; stream has no data]
empty?:bool <- copy 0/false
idx:num <- get *in, index:offset
@ -58,7 +58,7 @@ def peek in:&:stream:_elem -> result:_elem, empty?:bool [
def read-line in:&:stream:char -> result:text, in:&:stream:char [
local-scope
load-ingredients
load-inputs
assert in, [cannot read-line; stream has no data]
idx:num <- get *in, index:offset
s:text <- get *in, data:offset
@ -71,7 +71,7 @@ def read-line in:&:stream:char -> result:text, in:&:stream:char [
def end-of-stream? in:&:stream:_elem -> result:bool [
local-scope
load-ingredients
load-inputs
assert in, [cannot check end-of-stream?; stream has no data]
idx:num <- get *in, index:offset
s:&:@:_elem <- get *in, data:offset

View File

@ -1,6 +1,6 @@
def random generator:&:stream:num -> result:num, fail?:bool, generator:&:stream:num [
local-scope
load-ingredients
load-inputs
{
break-if generator
# generator is 0? use real random-number generator
@ -13,20 +13,20 @@ def random generator:&:stream:num -> result:num, fail?:bool, generator:&:stream:
# helper for tests
def assume-random-numbers -> result:&:stream:num [
local-scope
load-ingredients
load-inputs
# compute result-len, space to allocate in result
result-len:num <- copy 0
{
_, arg-received?:bool <- next-ingredient
_, arg-received?:bool <- next-input
break-unless arg-received?
result-len <- add result-len, 1
loop
}
rewind-ingredients
rewind-inputs
result-data:&:@:num <- new number:type, result-len
idx:num <- copy 0
{
curr:num, arg-received?:bool <- next-ingredient
curr:num, arg-received?:bool <- next-input
break-unless arg-received?
*result-data <- put-index *result-data, idx, curr
idx <- add idx, 1
@ -57,7 +57,7 @@ scenario random-numbers-in-scenario [
# generate a random integer in the semi-open interval [start, end)
def random-in-range generator:&:stream:num, start:num, end:num -> result:num, fail?:bool, generator:&:stream:num [
local-scope
load-ingredients
load-inputs
result, fail?, generator <- random generator
return-if fail?
delta:num <- subtract end, start

View File

@ -55,7 +55,7 @@ container table-row:_key:_value [
def new-table capacity:num -> result:&:table:_key:_value [
local-scope
load-ingredients
load-inputs
result <- new {(table _key _value): type}
data:&:@:table-row:_key:_value <- new {(table-row _key _value): type}, capacity
*result <- merge 0/length, capacity, data
@ -65,7 +65,7 @@ def new-table capacity:num -> result:&:table:_key:_value [
# then we could handle conflicts simply by resizing the table
def put-index table:&:table:_key:_value, key:_key, value:_value -> table:&:table:_key:_value [
local-scope
load-ingredients
load-inputs
hash:num <- hash key
hash <- abs hash
capacity:num <- get *table, capacity:offset
@ -82,7 +82,7 @@ def put-index table:&:table:_key:_value, key:_key, value:_value -> table:&:table
def index table:&:table:_key:_value, key:_key -> result:_value, found?:bool [
local-scope
load-ingredients
load-inputs
hash:num <- hash key
hash <- abs hash
capacity:num <- get *table, capacity:offset
@ -102,7 +102,7 @@ def index table:&:table:_key:_value, key:_key -> result:_value, found?:bool [
def abs n:num -> result:num [
local-scope
load-ingredients
load-inputs
positive?:bool <- greater-or-equal n, 0
return-if positive?, n
result <- multiply n, -1

View File

@ -10,9 +10,9 @@
# addresses from being shared between routines, and therefore eliminates all
# possibility of race conditions.
#
# There's still a narrow window for race conditions: the ingredients passed in
# There's still a narrow window for race conditions: the inputs passed in
# to 'start-running'. Pass only channels into routines and you should be fine.
# Any other mutable ingredients will require locks.
# Any other mutable inputs will require locks.
scenario channel [
run [
@ -50,7 +50,7 @@ container sink:_elem [
def new-channel capacity:num -> in:&:source:_elem, out:&:sink:_elem [
local-scope
load-ingredients
load-inputs
result:&:channel:_elem <- new {(channel _elem): type}
*result <- put *result, first-full:offset, 0
*result <- put *result, first-free:offset, 0
@ -66,7 +66,7 @@ def new-channel capacity:num -> in:&:source:_elem, out:&:sink:_elem [
# write a value to a channel
def write out:&:sink:_elem, val:_elem -> out:&:sink:_elem [
local-scope
load-ingredients
load-inputs
assert out, [write to null channel]
chan:&:channel:_elem <- get *out, chan:offset
<channel-write-initial>
@ -112,7 +112,7 @@ def write out:&:sink:_elem, val:_elem -> out:&:sink:_elem [
# read a value from a channel
def read in:&:source:_elem -> result:_elem, eof?:bool, in:&:source:_elem [
local-scope
load-ingredients
load-inputs
assert in, [read on null channel]
eof? <- copy 0/false # default result
chan:&:channel:_elem <- get *in, chan:offset
@ -311,7 +311,7 @@ scenario channel-clear [
def clear in:&:source:_elem -> in:&:source:_elem [
local-scope
load-ingredients
load-inputs
chan:&:channel:_elem <- get *in, chan:offset
{
empty?:bool <- channel-empty? chan
@ -333,13 +333,13 @@ container channel:_elem [
# both routines can modify the 'closed?' bit, but they can only ever set it, so this is a benign race
def close x:&:source:_elem -> x:&:source:_elem [
local-scope
load-ingredients
load-inputs
chan:&:channel:_elem <- get *x, chan:offset
*chan <- put *chan, closed?:offset, 1/true
]
def close x:&:sink:_elem -> x:&:sink:_elem [
local-scope
load-ingredients
load-inputs
chan:&:channel:_elem <- get *x, chan:offset
*chan <- put *chan, closed?:offset, 1/true
]
@ -369,7 +369,7 @@ after <channel-read-empty> [
# An empty channel has first-free and first-full both at the same value.
def channel-empty? chan:&:channel:_elem -> result:bool [
local-scope
load-ingredients
load-inputs
# return chan.first-full == chan.first-free
full:num <- get *chan, first-full:offset
free:num <- get *chan, first-free:offset
@ -380,7 +380,7 @@ def channel-empty? chan:&:channel:_elem -> result:bool [
# (Other alternatives: https://www.snellman.net/blog/archive/2016-12-13-ring-buffers)
def channel-full? chan:&:channel:_elem -> result:bool [
local-scope
load-ingredients
load-inputs
# tmp = chan.first-free + 1
tmp:num <- get *chan, first-free:offset
tmp <- add tmp, 1
@ -398,7 +398,7 @@ def channel-full? chan:&:channel:_elem -> result:bool [
def capacity chan:&:channel:_elem -> result:num [
local-scope
load-ingredients
load-inputs
q:&:@:_elem <- get *chan, data:offset
result <- length *q
]
@ -407,7 +407,7 @@ def capacity chan:&:channel:_elem -> result:num [
def buffer-lines in:&:source:char, buffered-out:&:sink:char -> buffered-out:&:sink:char, in:&:source:char [
local-scope
load-ingredients
load-inputs
# repeat forever
eof?:bool <- copy 0/false
{
@ -506,7 +506,7 @@ F buffer-lines-blocks-until-newline: channel should contain data after writing n
def drain source:&:source:char -> result:text, source:&:source:char [
local-scope
load-ingredients
load-inputs
buf:&:buffer:char <- new-buffer 30
{
c:char, done?:bool <- read source

View File

@ -31,7 +31,7 @@ container screen-cell [
def new-fake-screen w:num, h:num -> result:&:screen [
local-scope
load-ingredients
load-inputs
result <- new screen:type
non-zero-width?:bool <- greater-than w, 0
assert non-zero-width?, [screen can't have zero width]
@ -45,7 +45,7 @@ def new-fake-screen w:num, h:num -> result:&:screen [
def clear-screen screen:&:screen -> screen:&:screen [
local-scope
load-ingredients
load-inputs
#? stash [clear-screen]
{
break-if screen
@ -73,7 +73,7 @@ def clear-screen screen:&:screen -> screen:&:screen [
def fake-screen-is-empty? screen:&:screen -> result:bool [
local-scope
load-ingredients
load-inputs
#? stash [fake-screen-is-empty?]
return-unless screen, 1/true # do nothing for real screens
buf:&:@:screen-cell <- get *screen, data:offset
@ -94,14 +94,14 @@ def fake-screen-is-empty? screen:&:screen -> result:bool [
def print screen:&:screen, c:char -> screen:&:screen [
local-scope
load-ingredients
color:num, color-found?:bool <- next-ingredient
load-inputs
color:num, color-found?:bool <- next-input
{
# default color to white
break-if color-found?
color <- copy 7/white
}
bg-color:num, bg-color-found?:bool <- next-ingredient
bg-color:num, bg-color-found?:bool <- next-input
{
# default bg-color to black
break-if bg-color-found?
@ -205,7 +205,7 @@ def print screen:&:screen, c:char -> screen:&:screen [
def cursor-down-on-fake-screen screen:&:screen -> screen:&:screen [
local-scope
load-ingredients
load-inputs
#? stash [cursor-down]
row:num <- get *screen, cursor-row:offset
height:num <- get *screen, num-rows:offset
@ -224,7 +224,7 @@ def cursor-down-on-fake-screen screen:&:screen -> screen:&:screen [
def scroll-fake-screen screen:&:screen -> screen:&:screen [
local-scope
load-ingredients
load-inputs
#? stash [scroll-fake-screen]
width:num <- get *screen, num-columns:offset
height:num <- get *screen, num-rows:offset
@ -252,7 +252,7 @@ def scroll-fake-screen screen:&:screen -> screen:&:screen [
# while accounting for scrolling (sliding top-idx)
def data-index row:num, column:num, width:num, height:num, top-idx:num -> result:num [
local-scope
load-ingredients
load-inputs
{
overflow?:bool <- greater-or-equal row, height
break-unless overflow?
@ -508,13 +508,13 @@ scenario print-character-at-bottom-right [
# these helpers help check for scrolling at development time
def save-top-idx screen:&:screen -> result:num [
local-scope
load-ingredients
load-inputs
return-unless screen, 0 # check is only for fake screens
result <- get *screen, top-idx:offset
]
def assert-no-scroll screen:&:screen, old-top-idx:num [
local-scope
load-ingredients
load-inputs
return-unless screen
new-top-idx:num <- get *screen, top-idx:offset
no-scroll?:bool <- equal old-top-idx, new-top-idx
@ -523,7 +523,7 @@ def assert-no-scroll screen:&:screen, old-top-idx:num [
def clear-line screen:&:screen -> screen:&:screen [
local-scope
load-ingredients
load-inputs
#? stash [clear-line]
space:char <- copy 0/nul
{
@ -552,14 +552,14 @@ def clear-line screen:&:screen -> screen:&:screen [
# only for non-scrolling apps
def clear-line-until screen:&:screen, right:num/inclusive -> screen:&:screen [
local-scope
load-ingredients
load-inputs
row:num, column:num <- cursor-position screen
#? stash [clear-line-until] row column
height:num <- screen-height screen
past-bottom?:bool <- greater-or-equal row, height
return-if past-bottom?
space:char <- copy 32/space
bg-color:num, bg-color-found?:bool <- next-ingredient
bg-color:num, bg-color-found?:bool <- next-input
{
# default bg-color to black
break-if bg-color-found?
@ -576,7 +576,7 @@ def clear-line-until screen:&:screen, right:num/inclusive -> screen:&:screen [
def cursor-position screen:&:screen -> row:num, column:num [
local-scope
load-ingredients
load-inputs
{
break-if screen
# real screen
@ -590,7 +590,7 @@ def cursor-position screen:&:screen -> row:num, column:num [
def move-cursor screen:&:screen, new-row:num, new-column:num -> screen:&:screen [
local-scope
load-ingredients
load-inputs
#? stash [move-cursor] new-row new-column
{
break-if screen
@ -644,7 +644,7 @@ scenario clear-line-erases-printed-characters [
def cursor-down screen:&:screen -> screen:&:screen [
local-scope
load-ingredients
load-inputs
#? stash [cursor-down]
{
break-if screen
@ -687,7 +687,7 @@ scenario cursor-down-scrolls [
def cursor-up screen:&:screen -> screen:&:screen [
local-scope
load-ingredients
load-inputs
#? stash [cursor-up]
{
break-if screen
@ -705,7 +705,7 @@ def cursor-up screen:&:screen -> screen:&:screen [
def cursor-right screen:&:screen -> screen:&:screen [
local-scope
load-ingredients
load-inputs
#? stash [cursor-right]
{
break-if screen
@ -725,7 +725,7 @@ def cursor-right screen:&:screen -> screen:&:screen [
def cursor-left screen:&:screen -> screen:&:screen [
local-scope
load-ingredients
load-inputs
#? stash [cursor-left]
{
break-if screen
@ -743,7 +743,7 @@ def cursor-left screen:&:screen -> screen:&:screen [
def cursor-to-start-of-line screen:&:screen -> screen:&:screen [
local-scope
load-ingredients
load-inputs
#? stash [cursor-to-start-of-line]
row:num <- cursor-position screen
screen <- move-cursor screen, row, 0/column
@ -751,7 +751,7 @@ def cursor-to-start-of-line screen:&:screen -> screen:&:screen [
def cursor-to-next-line screen:&:screen -> screen:&:screen [
local-scope
load-ingredients
load-inputs
#? stash [cursor-to-next-line]
screen <- cursor-down screen
screen <- cursor-to-start-of-line screen
@ -759,7 +759,7 @@ def cursor-to-next-line screen:&:screen -> screen:&:screen [
def move-cursor-to-column screen:&:screen, column:num -> screen:&:screen [
local-scope
load-ingredients
load-inputs
row:num, _ <- cursor-position screen
#? stash [move-cursor-to-column] row
move-cursor screen, row, column
@ -767,7 +767,7 @@ def move-cursor-to-column screen:&:screen, column:num -> screen:&:screen [
def screen-width screen:&:screen -> width:num [
local-scope
load-ingredients
load-inputs
#? stash [screen-width]
{
break-unless screen
@ -781,7 +781,7 @@ def screen-width screen:&:screen -> width:num [
def screen-height screen:&:screen -> height:num [
local-scope
load-ingredients
load-inputs
#? stash [screen-height]
{
break-unless screen
@ -795,14 +795,14 @@ def screen-height screen:&:screen -> height:num [
def print screen:&:screen, s:text -> screen:&:screen [
local-scope
load-ingredients
color:num, color-found?:bool <- next-ingredient
load-inputs
color:num, color-found?:bool <- next-input
{
# default color to white
break-if color-found?
color <- copy 7/white
}
bg-color:num, bg-color-found?:bool <- next-ingredient
bg-color:num, bg-color-found?:bool <- next-input
{
# default bg-color to black
break-if bg-color-found?
@ -851,14 +851,14 @@ scenario print-text-wraps-past-right-margin [
def print screen:&:screen, n:num -> screen:&:screen [
local-scope
load-ingredients
color:num, color-found?:bool <- next-ingredient
load-inputs
color:num, color-found?:bool <- next-input
{
# default color to white
break-if color-found?
color <- copy 7/white
}
bg-color:num, bg-color-found?:bool <- next-ingredient
bg-color:num, bg-color-found?:bool <- next-input
{
# default bg-color to black
break-if bg-color-found?
@ -871,14 +871,14 @@ def print screen:&:screen, n:num -> screen:&:screen [
def print screen:&:screen, n:bool -> screen:&:screen [
local-scope
load-ingredients
color:num, color-found?:bool <- next-ingredient
load-inputs
color:num, color-found?:bool <- next-input
{
# default color to white
break-if color-found?
color <- copy 7/white
}
bg-color:num, bg-color-found?:bool <- next-ingredient
bg-color:num, bg-color-found?:bool <- next-input
{
# default bg-color to black
break-if bg-color-found?
@ -890,14 +890,14 @@ def print screen:&:screen, n:bool -> screen:&:screen [
def print screen:&:screen, n:&:_elem -> screen:&:screen [
local-scope
load-ingredients
color:num, color-found?:bool <- next-ingredient
load-inputs
color:num, color-found?:bool <- next-input
{
# default color to white
break-if color-found?
color <- copy 7/white
}
bg-color:num, bg-color-found?:bool <- next-ingredient
bg-color:num, bg-color-found?:bool <- next-input
{
# default bg-color to black
break-if bg-color-found?

View File

@ -27,14 +27,14 @@ container console [
def new-fake-console events:&:@:event -> result:&:console [
local-scope
load-ingredients
load-inputs
result:&:console <- new console:type
*result <- put *result, events:offset, events
]
def read-event console:&:console -> result:event, found?:bool, quit?:bool, console:&:console [
local-scope
load-ingredients
load-inputs
{
break-unless console
current-event-index:num <- get *console, current-event-index:offset
@ -61,7 +61,7 @@ def read-event console:&:console -> result:event, found?:bool, quit?:bool, conso
# newlines, tabs, ctrl-d..
def read-key console:&:console -> result:char, found?:bool, quit?:bool, console:&:console [
local-scope
load-ingredients
load-inputs
x:event, found?:bool, quit?:bool, console <- read-event console
return-if quit?, 0, found?, quit?
return-unless found?, 0, found?, quit?
@ -72,7 +72,7 @@ def read-key console:&:console -> result:char, found?:bool, quit?:bool, console:
def send-keys-to-channel console:&:console, chan:&:sink:char, screen:&:screen -> console:&:console, chan:&:sink:char, screen:&:screen [
local-scope
load-ingredients
load-inputs
{
c:char, found?:bool, quit?:bool, console <- read-key console
loop-unless found?
@ -87,7 +87,7 @@ def send-keys-to-channel console:&:console, chan:&:sink:char, screen:&:screen ->
def wait-for-event console:&:console -> console:&:console [
local-scope
load-ingredients
load-inputs
{
_, found?:bool <- read-event console
break-if found?
@ -98,7 +98,7 @@ def wait-for-event console:&:console -> console:&:console [
def has-more-events? console:&:console -> result:bool [
local-scope
load-ingredients
load-inputs
return-if console, 0/false # fake events are processed as soon as they arrive
result <- interactions-left?
]

View File

@ -20,7 +20,7 @@ container resource [
def start-reading resources:&:resources, filename:text -> contents:&:source:char, error?:bool [
local-scope
load-ingredients
load-inputs
error? <- copy 0/false
{
break-unless resources
@ -37,7 +37,7 @@ def start-reading resources:&:resources, filename:text -> contents:&:source:char
def slurp resources:&:resources, filename:text -> contents:text, error?:bool [
local-scope
load-ingredients
load-inputs
source:&:source:char, error?:bool <- start-reading resources, filename
return-if error?, 0/contents
buf:&:buffer:char <- new-buffer 30/capacity
@ -52,7 +52,7 @@ def slurp resources:&:resources, filename:text -> contents:text, error?:bool [
def start-reading-from-fake-resource resources:&:resources, resource:text -> contents:&:source:char, error?:bool [
local-scope
load-ingredients
load-inputs
error? <- copy 0/no-error
i:num <- copy 0
data:&:@:resource <- get *resources, data:offset
@ -75,7 +75,7 @@ def start-reading-from-fake-resource resources:&:resources, resource:text -> con
def receive-from-file file:num, sink:&:sink:char -> sink:&:sink:char [
local-scope
load-ingredients
load-inputs
{
c:char, eof?:bool <- $read-from-file file
break-if eof?
@ -88,7 +88,7 @@ def receive-from-file file:num, sink:&:sink:char -> sink:&:sink:char [
def receive-from-text contents:text, sink:&:sink:char -> sink:&:sink:char [
local-scope
load-ingredients
load-inputs
i:num <- copy 0
len:num <- length *contents
{
@ -104,7 +104,7 @@ def receive-from-text contents:text, sink:&:sink:char -> sink:&:sink:char [
def start-writing resources:&:resources, filename:text -> sink:&:sink:char, routine-id:num, error?:bool [
local-scope
load-ingredients
load-inputs
error? <- copy 0/false
source:&:source:char, sink:&:sink:char <- new-channel 30
{
@ -126,7 +126,7 @@ def start-writing resources:&:resources, filename:text -> sink:&:sink:char, rout
def dump resources:&:resources, filename:text, contents:text -> resources:&:resources, error?:bool [
local-scope
load-ingredients
load-inputs
# todo: really create an empty file
return-unless contents, resources, 0/no-error
sink-file:&:sink:char, write-routine:num, error?:bool <- start-writing resources, filename
@ -149,7 +149,7 @@ def dump resources:&:resources, filename:text, contents:text -> resources:&:reso
def transmit-to-file file:num, source:&:source:char -> source:&:source:char [
local-scope
load-ingredients
load-inputs
{
c:char, done?:bool, source <- read source
break-if done?
@ -161,7 +161,7 @@ def transmit-to-file file:num, source:&:source:char -> source:&:source:char [
def transmit-to-fake-resource resources:&:resources, filename:text, source:&:source:char -> resources:&:resources, source:&:source:char [
local-scope
load-ingredients
load-inputs
lock:location <- get-location *resources, lock:offset
wait-for-reset-then-set lock
# compute new file contents

View File

@ -25,7 +25,7 @@ F - example-server-test: $open-server-socket failed]
# helper just for this scenario
def example-handler query:text -> response:text [
local-scope
load-ingredients
load-inputs
return [abc]
]
@ -54,7 +54,7 @@ type request-handler = (recipe text -> text)
def serve-one-request socket:num, request-handler:request-handler -> socket:num [
local-scope
load-ingredients
load-inputs
session:num <- $accept socket
assert session, [
F - example-server-test: $accept failed]
@ -68,9 +68,9 @@ F - example-server-test: $accept failed]
def start-reading-from-network resources:&:resources, uri:text -> contents:&:source:char [
local-scope
load-ingredients
load-inputs
{
port:num, port-found?:boolean <- next-ingredient
port:num, port-found?:boolean <- next-input
break-if port-found?
port <- copy 80/http-port
}
@ -92,7 +92,7 @@ def start-reading-from-network resources:&:resources, uri:text -> contents:&:sou
def request-socket socket:num, s:text -> socket:num [
local-scope
load-ingredients
load-inputs
write-to-socket socket, s
$write-to-socket socket, 13/cr
$write-to-socket socket, 10/lf
@ -103,7 +103,7 @@ def request-socket socket:num, s:text -> socket:num [
def receive-from-socket socket:num, sink:&:sink:char -> sink:&:sink:char, socket:num [
local-scope
load-ingredients
load-inputs
{
+next-attempt
c:char, found?:bool, eof?:bool, error:num <- $read-from-socket socket
@ -124,14 +124,14 @@ def receive-from-socket socket:num, sink:&:sink:char -> sink:&:sink:char, socket
def receive-from-client-socket-and-close socket:num, sink:&:sink:char -> sink:&:sink:char, socket:num [
local-scope
load-ingredients
load-inputs
sink <- receive-from-socket socket, sink
socket <- $close-socket socket
]
def write-to-socket socket:num, s:text [
local-scope
load-ingredients
load-inputs
len:num <- length *s
i:num <- copy 0
{
@ -147,7 +147,7 @@ def write-to-socket socket:num, s:text [
# like split-first, but don't eat the delimiter
def split-at text:text, delim:char -> x:text, y:text [
local-scope
load-ingredients
load-inputs
# empty text? return empty texts
len:num <- length *text
{

View File

@ -3,7 +3,7 @@
def producer sink:&:sink:char -> sink:&:sink:char [
# produce characters 1 to 5 on a channel
local-scope
load-ingredients
load-inputs
# n = 0
n:char <- copy 0
{
@ -22,7 +22,7 @@ def producer sink:&:sink:char -> sink:&:sink:char [
def consumer source:&:source:char -> source:&:source:char [
# consume and print integers from a channel
local-scope
load-ingredients
load-inputs
{
# read an integer from the channel
n:char, eof?:bool, source <- read source

View File

@ -6,7 +6,7 @@ def main [
open-console # take control of screen, keyboard and mouse
clear-screen 0/screen # non-scrolling app
# The chessboard function takes keyboard and screen objects as 'ingredients'.
# The chessboard function takes keyboard and screen objects as inputs.
#
# In Mu it is good form (though not required) to explicitly state what
# hardware a function needs.
@ -68,7 +68,7 @@ type board = &:@:&:@:char # a 2-D array of arrays of characters
def chessboard screen:&:screen, console:&:console -> screen:&:screen, console:&:console [
local-scope
load-ingredients
load-inputs
board:board <- initial-position
# hook up stdin
stdin-in:&:source:char, stdin-out:&:sink:char <- new-channel 10/capacity
@ -106,7 +106,7 @@ def chessboard screen:&:screen, console:&:console -> screen:&:screen, console:&:
def new-board initial-position:&:@:char -> board:board [
local-scope
load-ingredients
load-inputs
# assert(length(initial-position) == 64)
len:num <- length *initial-position
correct-length?:bool <- equal len, 64
@ -126,7 +126,7 @@ def new-board initial-position:&:@:char -> board:board [
def new-file position:&:@:char, index:num -> result:&:@:char [
local-scope
load-ingredients
load-inputs
index <- multiply index, 8
result <- new character:type, 8
row:num <- copy 0
@ -143,7 +143,7 @@ def new-file position:&:@:char, index:num -> result:&:@:char [
def print-board screen:&:screen, board:board -> screen:&:screen [
local-scope
load-ingredients
load-inputs
row:num <- copy 7 # start printing from the top of the board
space:char <- copy 32/space
# print each row
@ -237,7 +237,7 @@ container move [
# prints only error messages to screen
def read-move stdin:&:source:char, screen:&:screen -> result:&:move, quit?:bool, error?:bool, stdin:&:source:char, screen:&:screen [
local-scope
load-ingredients
load-inputs
from-file:num, quit?:bool, error?:bool <- read-file stdin, screen
return-if quit?, 0/dummy
return-if error?, 0/dummy
@ -265,7 +265,7 @@ def read-move stdin:&:source:char, screen:&:screen -> result:&:move, quit?:bool,
# valid values for file: 0-7
def read-file stdin:&:source:char, screen:&:screen -> file:num, quit:bool, error:bool, stdin:&:source:char, screen:&:screen [
local-scope
load-ingredients
load-inputs
c:char, eof?:bool, stdin <- read stdin
return-if eof?, 0/dummy, 1/quit, 0/error
q-pressed?:bool <- equal c, 81/Q
@ -303,7 +303,7 @@ def read-file stdin:&:source:char, screen:&:screen -> file:num, quit:bool, error
# valid values for rank: 0-7
def read-rank stdin:&:source:char, screen:&:screen -> rank:num, quit?:bool, error?:bool, stdin:&:source:char, screen:&:screen [
local-scope
load-ingredients
load-inputs
c:char, eof?:bool, stdin <- read stdin
return-if eof?, 0/dummy, 1/quit, 0/error
q-pressed?:bool <- equal c, 81/Q
@ -341,7 +341,7 @@ def read-rank stdin:&:source:char, screen:&:screen -> rank:num, quit?:bool, erro
# return true on error
def expect-from-channel stdin:&:source:char, expected:char, screen:&:screen -> result:bool, stdin:&:source:char, screen:&:screen [
local-scope
load-ingredients
load-inputs
c:char, eof?:bool, stdin <- read stdin
return-if eof? 1/true
{
@ -358,7 +358,7 @@ scenario read-move-blocking [
source:&:source:char, sink:&:sink:char <- new-channel 2/capacity
read-move-routine:num/routine <- start-running read-move, source, screen:&:screen
run [
# 'read-move' is waiting for input
# 'read-move' is waiting for keypress
wait-for-routine-to-block read-move-routine
read-move-state:num <- routine-state read-move-routine
waiting?:bool <- not-equal read-move-state, 2/discontinued
@ -367,7 +367,7 @@ F read-move-blocking: routine failed to pause after coming up (before any keys w
# press 'a'
sink <- write sink, 97/a
restart read-move-routine
# 'read-move' still waiting for input
# 'read-move' still waiting for keypress
wait-for-routine-to-block read-move-routine
read-move-state <- routine-state read-move-routine
waiting? <- not-equal read-move-state, 2/discontinued
@ -376,7 +376,7 @@ F read-move-blocking: routine failed to pause after rank 'a']
# press '2'
sink <- write sink, 50/'2'
restart read-move-routine
# 'read-move' still waiting for input
# 'read-move' still waiting for keypress
wait-for-routine-to-block read-move-routine
read-move-state <- routine-state read-move-routine
waiting? <- not-equal read-move-state, 2/discontinued
@ -385,7 +385,7 @@ F read-move-blocking: routine failed to pause after file 'a2']
# press '-'
sink <- write sink, 45/'-'
restart read-move-routine
# 'read-move' still waiting for input
# 'read-move' still waiting for keypress
wait-for-routine-to-block read-move-routine
read-move-state <- routine-state read-move-routine
waiting? <- not-equal read-move-state, 2/discontinued
@ -394,7 +394,7 @@ F read-move-blocking: routine failed to pause after hyphen 'a2-']
# press 'a'
sink <- write sink, 97/a
restart read-move-routine
# 'read-move' still waiting for input
# 'read-move' still waiting for keypress
wait-for-routine-to-block read-move-routine
read-move-state <- routine-state read-move-routine
waiting? <- not-equal read-move-state, 2/discontinued
@ -403,7 +403,7 @@ F read-move-blocking: routine failed to pause after rank 'a2-a']
# press '4'
sink <- write sink, 52/'4'
restart read-move-routine
# 'read-move' still waiting for input
# 'read-move' still waiting for keypress
wait-for-routine-to-block read-move-routine
read-move-state <- routine-state read-move-routine
waiting? <- not-equal read-move-state, 2/discontinued
@ -431,7 +431,7 @@ scenario read-move-quit [
source:&:source:char, sink:&:sink:char <- new-channel 2/capacity
read-move-routine:num <- start-running read-move, source, screen:&:screen
run [
# 'read-move' is waiting for input
# 'read-move' is waiting for keypress
wait-for-routine-to-block read-move-routine
read-move-state:num <- routine-state read-move-routine
waiting?:bool <- not-equal read-move-state, 2/discontinued
@ -459,7 +459,7 @@ scenario read-move-illegal-file [
source:&:source:char, sink:&:sink:char <- new-channel 2/capacity
read-move-routine:num <- start-running read-move, source, screen:&:screen
run [
# 'read-move' is waiting for input
# 'read-move' is waiting for keypress
wait-for-routine-to-block read-move-routine
read-move-state:num <- routine-state read-move-routine
waiting?:bool <- not-equal read-move-state, 2/discontinued
@ -481,7 +481,7 @@ scenario read-move-illegal-rank [
source:&:source:char, sink:&:sink:char <- new-channel 2/capacity
read-move-routine:num <- start-running read-move, source, screen:&:screen
run [
# 'read-move' is waiting for input
# 'read-move' is waiting for keypress
wait-for-routine-to-block read-move-routine
read-move-state:num <- routine-state read-move-routine
waiting?:bool <- not-equal read-move-state, 2/discontinued
@ -504,7 +504,7 @@ scenario read-move-empty [
source:&:source:char, sink:&:sink:char <- new-channel 2/capacity
read-move-routine:num <- start-running read-move, source, screen:&:screen
run [
# 'read-move' is waiting for input
# 'read-move' is waiting for keypress
wait-for-routine-to-block read-move-routine
read-move-state:num <- routine-state read-move-routine
waiting?:bool <- not-equal read-move-state, 2/discontinued
@ -523,7 +523,7 @@ F read-move-empty: routine failed to pause after coming up (before any keys were
def make-move board:board, m:&:move -> board:board [
local-scope
load-ingredients
load-inputs
from-file:num <- get *m, from-file:offset
from-rank:num <- get *m, from-rank:offset
to-file:num <- get *m, to-file:offset

View File

@ -19,7 +19,7 @@ def main [
def create-yielder -> n:num [
local-scope
load-ingredients
load-inputs
return-continuation-until-mark
return 1
]

View File

@ -28,7 +28,7 @@ def main [
def create-yielder l:&:list:num -> n:num, done?:bool [
local-scope
load-ingredients
load-inputs
return-continuation-until-mark
done? <- equal l, 0
return-if done?, 0

View File

@ -30,7 +30,7 @@ def main [
def create-yielder l:&:list:num -> n:num, done?:bool [
local-scope
load-ingredients
load-inputs
{
done? <- equal l, 0
break-if done?

View File

@ -1,5 +1,5 @@
# Example program showing that a 'paused' continuation can be 'resumed' with
# ingredients.
# inputs.
#
# Print out a list of numbers, first adding 0 to the first, 1 to the second, 2
# to the third, and so on.
@ -33,7 +33,7 @@ def main [
def create-yielder l:&:list:num -> n:num, done?:bool [
local-scope
load-ingredients
load-inputs
a:num <- copy 0
{
done? <- equal l, 0

View File

@ -3,12 +3,12 @@
def new-counter n:num -> default-space:space [
default-space <- new location:type, 30
load-ingredients # initialize n
load-inputs # initialize n
]
def increment-counter outer:space/names:new-counter, x:num -> n:num/space:1 [
local-scope
load-ingredients
load-inputs
0:space/names:new-counter <- copy outer # setup outer space; it *must* come from 'new-counter'
n/space:1 <- add n/space:1, x
]

View File

@ -4,7 +4,7 @@
# screen dimensions, then stop
def main text:text [
local-scope
load-ingredients
load-inputs
open-console
clear-screen 0/screen # non-scrolling app
e:&:editor <- new-editor text, 0/left, 5/right
@ -50,7 +50,7 @@ container editor [
# right is exclusive
def new-editor s:text, left:num, right:num -> result:&:editor [
local-scope
load-ingredients
load-inputs
# no clipping of bounds
right <- subtract right, 1
result <- new editor:type
@ -71,7 +71,7 @@ def new-editor s:text, left:num, right:num -> result:&:editor [
def insert-text editor:&:editor, text:text -> editor:&:editor [
local-scope
load-ingredients
load-inputs
curr:&:duplex-list:char <- get *editor, data:offset
insert curr, text
]
@ -106,7 +106,7 @@ scenario editor-initializes-without-data [
# outside text.
def render screen:&:screen, editor:&:editor -> last-row:num, last-column:num, screen:&:screen, editor:&:editor [
local-scope
load-ingredients
load-inputs
return-unless editor, 1/top, 0/left
left:num <- get *editor, left:offset
screen-height:num <- screen-height screen
@ -206,7 +206,7 @@ def render screen:&:screen, editor:&:editor -> last-row:num, last-column:num, sc
def clear-screen-from screen:&:screen, row:num, column:num, left:num, right:num -> screen:&:screen [
local-scope
load-ingredients
load-inputs
#? stash [clear-screen-from] row column [between] left [and] right
# if it's the real screen, use the optimized primitive
{
@ -222,7 +222,7 @@ def clear-screen-from screen:&:screen, row:num, column:num, left:num, right:num
def clear-rest-of-screen screen:&:screen, row:num, left:num, right:num -> screen:&:screen [
local-scope
load-ingredients
load-inputs
row <- add row, 1
# if it's the real screen, use the optimized primitive
{
@ -396,7 +396,7 @@ after <character-c-received> [
# so far the previous color is all the information we need; that may change
def get-color color:num, c:char -> color:num [
local-scope
load-ingredients
load-inputs
color-is-white?:bool <- equal color, 7/white
# if color is white and next character is '#', switch color to blue
{

View File

@ -4,7 +4,7 @@
# hit ctrl-c to exit
def! main text:text [
local-scope
load-ingredients
load-inputs
open-console
clear-screen 0/screen # non-scrolling app
editor:&:editor <- new-editor text, 5/left, 45/right
@ -15,7 +15,7 @@ def! main text:text [
def editor-event-loop screen:&:screen, console:&:console, editor:&:editor -> screen:&:screen, console:&:console, editor:&:editor [
local-scope
load-ingredients
load-inputs
{
# looping over each (keyboard or touch) event as it occurs
+next-event
@ -49,7 +49,7 @@ def editor-event-loop screen:&:screen, console:&:console, editor:&:editor -> scr
# process click, return if it was on current editor
def move-cursor editor:&:editor, screen:&:screen, t:touch-event -> in-focus?:bool, editor:&:editor [
local-scope
load-ingredients
load-inputs
return-unless editor, 0/false
click-row:num <- get t, row:offset
return-unless click-row, 0/false # ignore clicks on 'menu'
@ -74,7 +74,7 @@ def move-cursor editor:&:editor, screen:&:screen, t:touch-event -> in-focus?:boo
# past the last line it positions at end of last line.
def snap-cursor editor:&:editor, screen:&:screen, target-row:num, target-column:num -> editor:&:editor [
local-scope
load-ingredients
load-inputs
return-unless editor
left:num <- get *editor, left:offset
right:num <- get *editor, right:offset
@ -165,7 +165,7 @@ def snap-cursor editor:&:editor, screen:&:screen, target-row:num, target-column:
# Set 'go-render?' to true to indicate the caller must perform a non-minimal update.
def handle-keyboard-event screen:&:screen, editor:&:editor, e:event -> go-render?:bool, screen:&:screen, editor:&:editor [
local-scope
load-ingredients
load-inputs
return-unless editor, 0/don't-render
screen-width:num <- screen-width screen
screen-height:num <- screen-height screen
@ -202,7 +202,7 @@ def handle-keyboard-event screen:&:screen, editor:&:editor, e:event -> go-render
def insert-at-cursor editor:&:editor, c:char, screen:&:screen -> go-render?:bool, editor:&:editor, screen:&:screen [
local-scope
load-ingredients
load-inputs
before-cursor:&:duplex-list:char <- get *editor, before-cursor:offset
insert c, before-cursor
before-cursor <- next before-cursor
@ -264,7 +264,7 @@ def insert-at-cursor editor:&:editor, c:char, screen:&:screen -> go-render?:bool
# helper for tests
def editor-render screen:&:screen, editor:&:editor -> screen:&:screen, editor:&:editor [
local-scope
load-ingredients
load-inputs
old-top-idx:num <- save-top-idx screen
left:num <- get *editor, left:offset
right:num <- get *editor, right:offset
@ -867,7 +867,7 @@ after <handle-special-character> [
def insert-new-line-and-indent editor:&:editor, screen:&:screen -> editor:&:editor, screen:&:screen [
local-scope
load-ingredients
load-inputs
cursor-row:num <- get *editor, cursor-row:offset
cursor-column:num <- get *editor, cursor-column:offset
before-cursor:&:duplex-list:char <- get *editor, before-cursor:offset
@ -913,7 +913,7 @@ def insert-new-line-and-indent editor:&:editor, screen:&:screen -> editor:&:edit
def at-start-of-wrapped-line? editor:&:editor -> result:bool [
local-scope
load-ingredients
load-inputs
left:num <- get *editor, left:offset
cursor-column:num <- get *editor, cursor-column:offset
cursor-at-left?:bool <- equal cursor-column, left
@ -933,7 +933,7 @@ def at-start-of-wrapped-line? editor:&:editor -> result:bool [
# the number of spaces at the start of the line containing 'curr'.
def line-indent curr:&:duplex-list:char, start:&:duplex-list:char -> result:num [
local-scope
load-ingredients
load-inputs
result:num <- copy 0
return-unless curr
at-start?:bool <- equal curr, start
@ -1115,22 +1115,22 @@ after <handle-special-key> [
def draw-horizontal screen:&:screen, row:num, x:num, right:num -> screen:&:screen [
local-scope
load-ingredients
load-inputs
height:num <- screen-height screen
past-bottom?:bool <- greater-or-equal row, height
return-if past-bottom?
style:char, style-found?:bool <- next-ingredient
style:char, style-found?:bool <- next-input
{
break-if style-found?
style <- copy 9472/horizontal
}
color:num, color-found?:bool <- next-ingredient
color:num, color-found?:bool <- next-input
{
# default color to white
break-if color-found?
color <- copy 245/grey
}
bg-color:num, bg-color-found?:bool <- next-ingredient
bg-color:num, bg-color-found?:bool <- next-input
{
break-if bg-color-found?
bg-color <- copy 0/black

View File

@ -108,7 +108,7 @@ after <handle-special-character> [
# backspaced-cell - value deleted (or 0 if nothing was deleted) so we can save it for undo, etc.
def delete-before-cursor editor:&:editor, screen:&:screen -> go-render?:bool, backspaced-cell:&:duplex-list:char, editor:&:editor, screen:&:screen [
local-scope
load-ingredients
load-inputs
before-cursor:&:duplex-list:char <- get *editor, before-cursor:offset
data:&:duplex-list:char <- get *editor, data:offset
# if at start of text (before-cursor at § sentinel), return
@ -155,7 +155,7 @@ def delete-before-cursor editor:&:editor, screen:&:screen -> go-render?:bool, ba
def move-cursor-coordinates-left editor:&:editor -> go-render?:bool, editor:&:editor [
local-scope
load-ingredients
load-inputs
go-render?:bool <- copy 0/false
before-cursor:&:duplex-list:char <- get *editor, before-cursor:offset
cursor-row:num <- get *editor, cursor-row:offset
@ -218,7 +218,7 @@ def move-cursor-coordinates-left editor:&:editor -> go-render?:bool, editor:&:ed
# the length of the previous line before the 'curr' pointer.
def previous-line-length curr:&:duplex-list:char, start:&:duplex-list:char -> result:num [
local-scope
load-ingredients
load-inputs
result:num <- copy 0
return-unless curr
at-start?:bool <- equal curr, start
@ -372,7 +372,7 @@ after <handle-special-key> [
def delete-at-cursor editor:&:editor, screen:&:screen -> go-render?:bool, deleted-cell:&:duplex-list:char, editor:&:editor, screen:&:screen [
local-scope
load-ingredients
load-inputs
before-cursor:&:duplex-list:char <- get *editor, before-cursor:offset
data:&:duplex-list:char <- get *editor, data:offset
deleted-cell:&:duplex-list:char <- next before-cursor
@ -452,7 +452,7 @@ after <handle-special-key> [
def move-cursor-coordinates-right editor:&:editor, screen-height:num -> go-render?:bool, editor:&:editor [
local-scope
load-ingredients
load-inputs
before-cursor:&:duplex-list:char <- get *editor before-cursor:offset
cursor-row:num <- get *editor, cursor-row:offset
cursor-column:num <- get *editor, cursor-column:offset
@ -999,7 +999,7 @@ after <handle-special-key> [
def move-to-previous-line editor:&:editor -> go-render?:bool, editor:&:editor [
local-scope
load-ingredients
load-inputs
go-render?:bool <- copy 0/false
cursor-row:num <- get *editor, cursor-row:offset
cursor-column:num <- get *editor, cursor-column:offset
@ -1353,7 +1353,7 @@ after <handle-special-key> [
def move-to-next-line editor:&:editor, screen-height:num -> go-render?:bool, editor:&:editor [
local-scope
load-ingredients
load-inputs
cursor-row:num <- get *editor, cursor-row:offset
cursor-column:num <- get *editor, cursor-column:offset
before-cursor:&:duplex-list:char <- get *editor, before-cursor:offset
@ -1564,7 +1564,7 @@ after <handle-special-key> [
# precondition: cursor-column should be in a consistent state
def move-to-start-of-screen-line editor:&:editor -> editor:&:editor [
local-scope
load-ingredients
load-inputs
# update cursor column
left:num <- get *editor, left:offset
col:num <- get *editor, cursor-column:offset
@ -1787,7 +1787,7 @@ after <handle-special-key> [
def move-to-end-of-line editor:&:editor -> editor:&:editor [
local-scope
load-ingredients
load-inputs
before-cursor:&:duplex-list:char <- get *editor, before-cursor:offset
cursor-column:num <- get *editor, cursor-column:offset
right:num <- get *editor, right:offset
@ -1970,7 +1970,7 @@ after <handle-special-character> [
def minimal-render-for-ctrl-u screen:&:screen, editor:&:editor, deleted-cells:&:duplex-list:char -> go-render?:bool, screen:&:screen [
local-scope
load-ingredients
load-inputs
curr-column:num <- get *editor, cursor-column:offset
# accumulate the current line as text and render it
buf:&:buffer:char <- new-buffer 30 # accumulator for the text we need to render
@ -2005,7 +2005,7 @@ def minimal-render-for-ctrl-u screen:&:screen, editor:&:editor, deleted-cells:&:
def delete-to-start-of-line editor:&:editor -> result:&:duplex-list:char, editor:&:editor [
local-scope
load-ingredients
load-inputs
# compute range to delete
init:&:duplex-list:char <- get *editor, data:offset
top-of-screen:&:duplex-list:char <- get *editor, top-of-screen:offset
@ -2061,7 +2061,7 @@ def delete-to-start-of-line editor:&:editor -> result:&:duplex-list:char, editor
def render-code screen:&:screen, s:text, left:num, right:num, row:num -> row:num, screen:&:screen [
local-scope
load-ingredients
load-inputs
return-unless s
color:num <- copy 7/white
column:num <- copy left
@ -2548,7 +2548,7 @@ after <handle-special-character> [
def minimal-render-for-ctrl-k screen:&:screen, editor:&:editor, deleted-cells:&:duplex-list:char -> go-render?:bool, screen:&:screen [
local-scope
load-ingredients
load-inputs
# if we deleted nothing, there's nothing to render
return-unless deleted-cells, 0/dont-render
# if the line used to wrap before, give up and render the whole screen
@ -2566,7 +2566,7 @@ def minimal-render-for-ctrl-k screen:&:screen, editor:&:editor, deleted-cells:&:
def delete-to-end-of-line editor:&:editor -> result:&:duplex-list:char, editor:&:editor [
local-scope
load-ingredients
load-inputs
# compute range to delete
start:&:duplex-list:char <- get *editor, before-cursor:offset
end:&:duplex-list:char <- next start
@ -2803,7 +2803,7 @@ after <scroll-down> [
# Beware: never return null pointer.
def before-start-of-next-line original:&:duplex-list:char, max:num -> curr:&:duplex-list:char [
local-scope
load-ingredients
load-inputs
count:num <- copy 0
curr:&:duplex-list:char <- copy original
# skip the initial newline if it exists
@ -3174,7 +3174,7 @@ after <scroll-up> [
# Beware: never return null pointer.
def before-previous-screen-line in:&:duplex-list:char, editor:&:editor -> out:&:duplex-list:char [
local-scope
load-ingredients
load-inputs
curr:&:duplex-list:char <- copy in
c:char <- get *curr, value:offset
# compute max, number of characters to skip
@ -3596,7 +3596,7 @@ after <handle-special-key> [
# taking up the entire screen
def page-down editor:&:editor -> editor:&:editor [
local-scope
load-ingredients
load-inputs
# if editor contents don't overflow screen, do nothing
bottom-of-screen:&:duplex-list:char <- get *editor, bottom-of-screen:offset
return-unless bottom-of-screen
@ -3621,7 +3621,7 @@ def page-down editor:&:editor -> editor:&:editor [
# jump to previous newline
def move-to-start-of-line editor:&:editor -> editor:&:editor [
local-scope
load-ingredients
load-inputs
# update cursor column
left:num <- get *editor, left:offset
cursor-column:num <- copy left
@ -3819,7 +3819,7 @@ after <handle-special-key> [
def page-up editor:&:editor, screen-height:num -> editor:&:editor [
local-scope
load-ingredients
load-inputs
max:num <- subtract screen-height, 1/menu-bar, 1/overlapping-line
count:num <- copy 0
top-of-screen:&:duplex-list:char <- get *editor, top-of-screen:offset
@ -4148,7 +4148,7 @@ after <handle-special-character> [
def line-up editor:&:editor, screen-height:num -> go-render?:bool, editor:&:editor [
local-scope
load-ingredients
load-inputs
left:num <- get *editor, left:offset
right:num <- get *editor, right:offset
max:num <- subtract right, left
@ -4179,7 +4179,7 @@ after <handle-special-character> [
def line-down editor:&:editor, screen-height:num -> go-render?:bool, editor:&:editor [
local-scope
load-ingredients
load-inputs
old-top:&:duplex-list:char <- get *editor, top-of-screen:offset
new-top:&:duplex-list:char <- before-previous-screen-line old-top, editor
movement?:bool <- not-equal old-top, new-top
@ -4249,7 +4249,7 @@ after <handle-special-character> [
# the caller to go-render? the entire screen.
def render-line-from-start screen:&:screen, editor:&:editor, right-margin:num -> go-render?:bool, screen:&:screen [
local-scope
load-ingredients
load-inputs
before-line-start:&:duplex-list:char <- before-start-of-screen-line editor
line-start:&:duplex-list:char <- next before-line-start
color:num <- copy 7/white
@ -4279,7 +4279,7 @@ def render-line-from-start screen:&:screen, editor:&:editor, right-margin:num ->
def before-start-of-screen-line editor:&:editor -> result:&:duplex-list:char [
local-scope
load-ingredients
load-inputs
cursor:&:duplex-list:char <- get *editor, before-cursor:offset
{
next:&:duplex-list:char <- next cursor

View File

@ -20,7 +20,7 @@ container environment [
def new-programming-environment resources:&:resources, screen:&:screen, test-sandbox-editor-contents:text -> result:&:environment [
local-scope
load-ingredients
load-inputs
width:num <- screen-width screen
result <- new environment:type
# recipe editor on the left
@ -38,7 +38,7 @@ def new-programming-environment resources:&:resources, screen:&:screen, test-san
def event-loop screen:&:screen, console:&:console, env:&:environment, resources:&:resources -> screen:&:screen, console:&:console, env:&:environment, resources:&:resources [
local-scope
load-ingredients
load-inputs
recipes:&:editor <- get *env, recipes:offset
current-sandbox:&:editor <- get *env, current-sandbox:offset
sandbox-in-focus?:bool <- get *env, sandbox-in-focus?:offset
@ -130,7 +130,7 @@ def event-loop screen:&:screen, console:&:console, env:&:environment, resources:
def resize screen:&:screen, env:&:environment -> env:&:environment, screen:&:screen [
local-scope
load-ingredients
load-inputs
clear-screen screen # update screen dimensions
width:num <- screen-width screen
divider:num, _ <- divide-with-remainder width, 2
@ -157,7 +157,7 @@ def resize screen:&:screen, env:&:environment -> env:&:environment, screen:&:scr
# off-screen, it resets cursor-row and cursor-column.
def render-without-moving-cursor screen:&:screen, editor:&:editor -> last-row:num, last-column:num, screen:&:screen, editor:&:editor [
local-scope
load-ingredients
load-inputs
return-unless editor, 1/top, 0/left
left:num <- get *editor, left:offset
screen-height:num <- screen-height screen
@ -401,7 +401,7 @@ type render-recipe = (recipe (address screen) (address editor) -> number number
def render-all screen:&:screen, env:&:environment, render-editor:render-recipe -> screen:&:screen, env:&:environment [
local-scope
load-ingredients
load-inputs
trace 10, [app], [render all]
# top menu
trace 11, [app], [render top menu]
@ -430,7 +430,7 @@ def render-all screen:&:screen, env:&:environment, render-editor:render-recipe -
def render-recipes screen:&:screen, env:&:environment, render-editor:render-recipe -> screen:&:screen, env:&:environment [
local-scope
load-ingredients
load-inputs
trace 11, [app], [render recipes]
old-top-idx:num <- save-top-idx screen
recipes:&:editor <- get *env, recipes:offset
@ -452,7 +452,7 @@ def render-recipes screen:&:screen, env:&:environment, render-editor:render-reci
# replaced in a later layer
def render-sandbox-side screen:&:screen, env:&:environment, render-editor:render-recipe -> screen:&:screen, env:&:environment [
local-scope
load-ingredients
load-inputs
trace 11, [app], [render sandboxes]
old-top-idx:num <- save-top-idx screen
current-sandbox:&:editor <- get *env, current-sandbox:offset
@ -471,7 +471,7 @@ def render-sandbox-side screen:&:screen, env:&:environment, render-editor:render
def update-cursor screen:&:screen, recipes:&:editor, current-sandbox:&:editor, sandbox-in-focus?:bool, env:&:environment -> screen:&:screen [
local-scope
load-ingredients
load-inputs
<update-cursor-special-cases>
{
break-if sandbox-in-focus?
@ -505,13 +505,13 @@ after <global-type> [
def draw-vertical screen:&:screen, col:num, y:num, bottom:num -> screen:&:screen [
local-scope
load-ingredients
style:char, style-found?:bool <- next-ingredient
load-inputs
style:char, style-found?:bool <- next-input
{
break-if style-found?
style <- copy 9474/vertical
}
color:num, color-found?:bool <- next-ingredient
color:num, color-found?:bool <- next-input
{
# default color to white
break-if color-found?

View File

@ -145,7 +145,7 @@ after <global-keypress> [
def run-sandboxes env:&:environment, resources:&:resources, screen:&:screen -> errors-found?:bool, env:&:environment, resources:&:resources, screen:&:screen [
local-scope
load-ingredients
load-inputs
errors-found?:bool <- update-recipes env, resources, screen
jump-if errors-found?, +return
# check contents of right editor (sandbox)
@ -196,7 +196,7 @@ def run-sandboxes env:&:environment, resources:&:resources, screen:&:screen -> e
# replaced in a later layer (whereupon errors-found? will actually be set)
def update-recipes env:&:environment, resources:&:resources, screen:&:screen -> errors-found?:bool, env:&:environment, resources:&:resources, screen:&:screen [
local-scope
load-ingredients
load-inputs
recipes:&:editor <- get *env, recipes:offset
in:text <- editor-contents recipes
resources <- dump resources, [lesson/recipes.mu], in
@ -207,7 +207,7 @@ def update-recipes env:&:environment, resources:&:resources, screen:&:screen ->
# replaced in a later layer
def update-sandbox sandbox:&:sandbox, env:&:environment, idx:num -> sandbox:&:sandbox, env:&:environment [
local-scope
load-ingredients
load-inputs
data:text <- get *sandbox, data:offset
response:text, _, fake-screen:&:screen <- run-sandboxed data
*sandbox <- put *sandbox, response:offset, response
@ -216,14 +216,14 @@ def update-sandbox sandbox:&:sandbox, env:&:environment, idx:num -> sandbox:&:sa
def update-status screen:&:screen, msg:text, color:num -> screen:&:screen [
local-scope
load-ingredients
load-inputs
screen <- move-cursor screen, 0, 2
screen <- print screen, msg, color, 238/grey/background
]
def save-sandboxes env:&:environment, resources:&:resources -> resources:&:resources [
local-scope
load-ingredients
load-inputs
trace 11, [app], [save sandboxes]
current-sandbox:&:editor <- get *env, current-sandbox:offset
# first clear previous versions, in case we deleted some sandbox
@ -241,7 +241,7 @@ def save-sandboxes env:&:environment, resources:&:resources -> resources:&:resou
def save-sandbox resources:&:resources, sandbox:&:sandbox, sandbox-index:num -> resources:&:resources [
local-scope
load-ingredients
load-inputs
data:text <- get *sandbox, data:offset
filename:text <- append [lesson/], sandbox-index
resources <- dump resources, filename, data
@ -250,7 +250,7 @@ def save-sandbox resources:&:resources, sandbox:&:sandbox, sandbox-index:num ->
def! render-sandbox-side screen:&:screen, env:&:environment, render-editor:render-recipe -> screen:&:screen, env:&:environment [
local-scope
load-ingredients
load-inputs
trace 11, [app], [render sandbox side]
old-top-idx:num <- save-top-idx screen
current-sandbox:&:editor <- get *env, current-sandbox:offset
@ -277,7 +277,7 @@ def! render-sandbox-side screen:&:screen, env:&:environment, render-editor:rende
def render-sandboxes screen:&:screen, sandbox:&:sandbox, left:num, right:num, row:num, render-from:num, idx:num -> row:num, screen:&:screen, sandbox:&:sandbox [
local-scope
load-ingredients
load-inputs
return-unless sandbox
screen-height:num <- screen-height screen
hidden?:bool <- lesser-than idx, render-from
@ -332,7 +332,7 @@ def render-sandboxes screen:&:screen, sandbox:&:sandbox, left:num, right:num, ro
def render-sandbox-menu screen:&:screen, sandbox-index:num, left:num, right:num -> screen:&:screen [
local-scope
load-ingredients
load-inputs
move-cursor-to-column screen, left
edit-button-left:num, edit-button-right:num, copy-button-left:num, copy-button-right:num, recipe-button-left:num, recipe-button-right:num, delete-button-left:num <- sandbox-menu-columns left, right
print screen, sandbox-index, 232/dark-grey, 245/grey
@ -377,7 +377,7 @@ scenario skip-rendering-sandbox-menu-past-bottom-row [
# all left/right pairs are inclusive
def sandbox-menu-columns left:num, right:num -> edit-button-left:num, edit-button-right:num, copy-button-left:num, copy-button-right:num, recipe-button-left:num, recipe-button-right:num, delete-button-left:num [
local-scope
load-ingredients
load-inputs
start-buttons:num <- add left, 4/space-for-sandbox-index
buttons-space:num <- subtract right, start-buttons
button-width:num <- divide-with-remainder buttons-space, 4 # integer division
@ -397,7 +397,7 @@ def sandbox-menu-columns left:num, right:num -> edit-button-left:num, edit-butto
# like 'render-code' but without syntax-based colorization
def render-text screen:&:screen, s:text, left:num, right:num, color:num, row:num -> row:num, screen:&:screen [
local-scope
load-ingredients
load-inputs
return-unless s
column:num <- copy left
screen <- move-cursor screen, row, column
@ -474,7 +474,7 @@ scenario render-text-wraps-barely-long-lines [
# assumes programming environment has no sandboxes; restores them from previous session
def restore-sandboxes env:&:environment, resources:&:resources -> env:&:environment [
local-scope
load-ingredients
load-inputs
# read all scenarios, pushing them to end of a list of scenarios
idx:num <- copy 0
curr:&:sandbox <- copy 0
@ -508,7 +508,7 @@ def restore-sandboxes env:&:environment, resources:&:resources -> env:&:environm
# leave cursor at start of next line
def render-screen screen:&:screen, sandbox-screen:&:screen, left:num, right:num, row:num -> row:num, screen:&:screen [
local-scope
load-ingredients
load-inputs
return-unless sandbox-screen
# print 'screen:'
row <- render-text screen, [screen:], left, right, 245/grey, row
@ -682,7 +682,7 @@ scenario run-instruction-manages-screen-per-sandbox [
def editor-contents editor:&:editor -> result:text [
local-scope
load-ingredients
load-inputs
buf:&:buffer:char <- new-buffer 80
curr:&:duplex-list:char <- get *editor, data:offset
# skip § sentinel
@ -944,7 +944,7 @@ after <global-keypress> [
# return 0 if there's no such sandbox, either because 'in' doesn't exist in 'env', or because it's the first sandbox
def previous-sandbox env:&:environment, in:&:sandbox -> out:&:sandbox [
local-scope
load-ingredients
load-inputs
curr:&:sandbox <- get *env, sandbox:offset
return-unless curr, 0/nil
next:&:sandbox <- get *curr, next-sandbox:offset

View File

@ -139,7 +139,7 @@ after <global-touch> [
# some preconditions for attempting to copy a sandbox
def should-attempt-copy? click-row:num, click-column:num, env:&:environment -> result:bool [
local-scope
load-ingredients
load-inputs
# are we below the sandbox editor?
click-sandbox-area?:bool <- click-on-sandbox-area? click-row, click-column, env
return-unless click-sandbox-area?, 0/false
@ -158,7 +158,7 @@ def should-attempt-copy? click-row:num, click-column:num, env:&:environment -> r
def try-copy-sandbox click-row:num, env:&:environment -> clicked-on-copy-button?:bool, env:&:environment [
local-scope
load-ingredients
load-inputs
# identify the sandbox to copy, if the click was actually on the 'copy' button
sandbox:&:sandbox <- find-sandbox env, click-row
return-unless sandbox, 0/false
@ -174,7 +174,7 @@ def try-copy-sandbox click-row:num, env:&:environment -> clicked-on-copy-button?
def find-sandbox env:&:environment, click-row:num -> result:&:sandbox [
local-scope
load-ingredients
load-inputs
curr-sandbox:&:sandbox <- get *env, sandbox:offset
{
break-unless curr-sandbox
@ -189,7 +189,7 @@ def find-sandbox env:&:environment, click-row:num -> result:&:sandbox [
def click-on-sandbox-area? click-row:num, click-column:num, env:&:environment -> result:bool [
local-scope
load-ingredients
load-inputs
current-sandbox:&:editor <- get *env, current-sandbox:offset
sandbox-left-margin:num <- get *current-sandbox, left:offset
on-sandbox-side?:bool <- greater-or-equal click-column, sandbox-left-margin
@ -202,7 +202,7 @@ def click-on-sandbox-area? click-row:num, click-column:num, env:&:environment ->
def empty-editor? editor:&:editor -> result:bool [
local-scope
load-ingredients
load-inputs
head:&:duplex-list:char <- get *editor, data:offset
first:&:duplex-list:char <- next head
result <- not first
@ -210,7 +210,7 @@ def empty-editor? editor:&:editor -> result:bool [
def within-range? x:num, low:num, high:num -> result:bool [
local-scope
load-ingredients
load-inputs
not-too-far-left?:bool <- greater-or-equal x, low
not-too-far-right?:bool <- lesser-or-equal x, high
result <- and not-too-far-left? not-too-far-right?
@ -359,7 +359,7 @@ after <global-touch> [
# some preconditions for attempting to copy a sandbox into the recipe side
def should-copy-to-recipe? click-row:num, click-column:num, env:&:environment -> result:bool [
local-scope
load-ingredients
load-inputs
# are we below the sandbox editor?
click-sandbox-area?:bool <- click-on-sandbox-area? click-row, click-column, env
return-unless click-sandbox-area?, 0/false
@ -374,7 +374,7 @@ def should-copy-to-recipe? click-row:num, click-column:num, env:&:environment ->
def prepend-sandbox-into-recipe-side click-row:num, env:&:environment -> clicked-on-copy-to-recipe-button?:bool, env:&:environment [
local-scope
load-ingredients
load-inputs
sandbox:&:sandbox <- find-sandbox env, click-row
return-unless sandbox, 0/false
recipe-editor:&:editor <- get *env, recipes:offset

View File

@ -82,7 +82,7 @@ after <global-touch> [
# some preconditions for attempting to delete a sandbox
def should-attempt-delete? click-row:num, click-column:num, env:&:environment -> result:bool [
local-scope
load-ingredients
load-inputs
# are we below the sandbox editor?
click-sandbox-area?:bool <- click-on-sandbox-area? click-row, click-column, env
return-unless click-sandbox-area?, 0/false
@ -97,7 +97,7 @@ def should-attempt-delete? click-row:num, click-column:num, env:&:environment ->
def try-delete-sandbox click-row:num, env:&:environment -> clicked-on-delete-button?:bool, env:&:environment [
local-scope
load-ingredients
load-inputs
# identify the sandbox to delete, if the click was actually on the 'delete' button
sandbox:&:sandbox <- find-sandbox env, click-row
return-unless sandbox, 0/false
@ -107,7 +107,7 @@ def try-delete-sandbox click-row:num, env:&:environment -> clicked-on-delete-but
def delete-sandbox env:&:environment, sandbox:&:sandbox -> env:&:environment [
local-scope
load-ingredients
load-inputs
curr-sandbox:&:sandbox <- get *env, sandbox:offset
first-sandbox?:bool <- equal curr-sandbox, sandbox
{

View File

@ -122,7 +122,7 @@ after <global-touch> [
# some preconditions for attempting to edit a sandbox
def should-attempt-edit? click-row:num, click-column:num, env:&:environment -> result:bool [
local-scope
load-ingredients
load-inputs
# are we below the sandbox editor?
click-sandbox-area?:bool <- click-on-sandbox-area? click-row, click-column, env
return-unless click-sandbox-area?, 0/false
@ -141,7 +141,7 @@ def should-attempt-edit? click-row:num, click-column:num, env:&:environment -> r
def try-edit-sandbox click-row:num, env:&:environment -> clicked-on-edit-button?:bool, env:&:environment [
local-scope
load-ingredients
load-inputs
# identify the sandbox to edit, if the click was actually on the 'edit' button
sandbox:&:sandbox <- find-sandbox env, click-row
return-unless sandbox, 0/false

View File

@ -151,7 +151,7 @@ after <global-touch> [
def find-click-in-sandbox-output env:&:environment, click-row:num -> sandbox:&:sandbox, sandbox-index:num [
local-scope
load-ingredients
load-inputs
# assert click-row >= sandbox.starting-row-on-screen
sandbox:&:sandbox <- get *env, sandbox:offset
start:num <- get *sandbox, starting-row-on-screen:offset
@ -179,7 +179,7 @@ def find-click-in-sandbox-output env:&:environment, click-row:num -> sandbox:&:s
def toggle-expected-response sandbox:&:sandbox -> sandbox:&:sandbox [
local-scope
load-ingredients
load-inputs
expected-response:text <- get *sandbox, expected-response:offset
{
# if expected-response is set, reset
@ -206,7 +206,7 @@ after <render-sandbox-response> [
def render-sandbox-response screen:&:screen, sandbox:&:sandbox, left:num, right:num -> row:num, screen:&:screen [
local-scope
load-ingredients
load-inputs
sandbox-response:text <- get *sandbox, response:offset
expected-response:text <- get *sandbox, expected-response:offset
row:num <- get *sandbox response-starting-row-on-screen:offset

View File

@ -174,7 +174,7 @@ container sandbox [
# replaced in a later layer
def! update-sandbox sandbox:&:sandbox, env:&:environment, idx:num -> sandbox:&:sandbox, env:&:environment [
local-scope
load-ingredients
load-inputs
data:text <- get *sandbox, data:offset
response:text, _, fake-screen:&:screen, trace:text <- run-sandboxed data
*sandbox <- put *sandbox, response:offset, response
@ -211,7 +211,7 @@ after <global-touch> [
def find-click-in-sandbox-code env:&:environment, click-row:num -> sandbox:&:sandbox [
local-scope
load-ingredients
load-inputs
# assert click-row >= sandbox.starting-row-on-screen
sandbox <- get *env, sandbox:offset
start:num <- get *sandbox, starting-row-on-screen:offset

View File

@ -7,7 +7,7 @@ container environment [
# copy code from recipe editor, persist to disk, load, save any errors
def! update-recipes env:&:environment, resources:&:resources, screen:&:screen -> errors-found?:bool, env:&:environment, resources:&:resources, screen:&:screen [
local-scope
load-ingredients
load-inputs
recipes:&:editor <- get *env, recipes:offset
in:text <- editor-contents recipes
resources <- dump resources, [lesson/recipes.mu], in
@ -41,7 +41,7 @@ before <end-render-recipe-components> [
def render-recipe-errors env:&:environment, screen:&:screen -> screen:&:screen [
local-scope
load-ingredients
load-inputs
recipe-errors:text <- get *env, recipe-errors:offset
return-unless recipe-errors
recipes:&:editor <- get *env, recipes:offset
@ -96,7 +96,7 @@ container sandbox [
def! update-sandbox sandbox:&:sandbox, env:&:environment, idx:num -> sandbox:&:sandbox, env:&:environment [
local-scope
load-ingredients
load-inputs
data:text <- get *sandbox, data:offset
response:text, errors:text, fake-screen:&:screen, trace:text, completed?:bool <- run-sandboxed data
*sandbox <- put *sandbox, response:offset, response

View File

@ -201,7 +201,7 @@ before <end-insert-enter> [
# moving the cursor can lose work on the undo stack.
def add-operation editor:&:editor, op:&:operation -> editor:&:editor [
local-scope
load-ingredients
load-inputs
undo:&:list:&:operation <- get *editor, undo:offset
undo <- push op undo
*editor <- put *editor, undo:offset, undo

View File

@ -9,7 +9,7 @@ def main [
def factorial n:num -> result:num [
local-scope
load-ingredients
load-inputs
{
# if n=0 return 1
zero?:bool <- equal n, 0

View File

@ -220,7 +220,7 @@ if ('onhashchange' in window) {
<span id="L157" class="LineNr">157 </span> sigaction<span class="Delimiter">(</span><span class="Constant">SIGABRT</span><span class="Delimiter">,</span> &amp;action<span class="Delimiter">,</span> <span class="Constant">NULL</span><span class="Delimiter">);</span> <span class="Comment">// assert() failure or integer overflow on linux (with -ftrapv)</span>
<span id="L158" class="LineNr">158 </span> sigaction<span class="Delimiter">(</span><span class="Constant">SIGILL</span><span class="Delimiter">,</span> &amp;action<span class="Delimiter">,</span> <span class="Constant">NULL</span><span class="Delimiter">);</span> <span class="Comment">// integer overflow on OS X (with -ftrapv)</span>
<span id="L159" class="LineNr">159 </span><span class="Delimiter">}</span>
<span id="L160" class="LineNr">160 </span><span class="Normal">void</span> <a href='001help.cc.html#L160'>dump_and_exit</a><span class="Delimiter">(</span><span class="Normal">int</span> sig<span class="Delimiter">,</span> <a href='001help.cc.html#L258'>unused</a> siginfo_t* dummy1<span class="Delimiter">,</span> <a href='001help.cc.html#L258'>unused</a> <span class="Normal">void</span>* dummy2<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L160" class="LineNr">160 </span><span class="Normal">void</span> <a href='001help.cc.html#L160'>dump_and_exit</a><span class="Delimiter">(</span><span class="Normal">int</span> sig<span class="Delimiter">,</span> <a href='001help.cc.html#L259'>unused</a> siginfo_t* dummy1<span class="Delimiter">,</span> <a href='001help.cc.html#L259'>unused</a> <span class="Normal">void</span>* dummy2<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L161" class="LineNr">161 </span> <span class="Normal">switch</span> <span class="Delimiter">(</span>sig<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L162" class="LineNr">162 </span> <span class="Conceal">¦</span> <span class="Normal">case</span> <span class="Constant">SIGABRT</span>:
<span id="L163" class="LineNr">163 </span><span class="PreProc"> </span><span class="Conceal">¦</span><span class="PreProc"> </span><span class="Conceal">¦</span><span class="PreProc"> #ifndef __APPLE__</span>
@ -282,47 +282,48 @@ if ('onhashchange' in window) {
<span id="L219" class="LineNr">219 </span> <span class="Identifier">return</span> iter<span class="Delimiter">-&gt;</span>second<span class="Delimiter">;</span>
<span id="L220" class="LineNr">220 </span><span class="Delimiter">}</span>
<span id="L221" class="LineNr">221 </span><span class="Normal">template</span>&lt;<span class="Normal">typename</span> T&gt; <span class="Normal">typename</span> T::mapped_type <span class="Normal">const</span>&amp; <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>T&amp; map<span class="Delimiter">,</span> <span class="Normal">typename</span> T::key_type <span class="Normal">const</span>&amp; key<span class="Delimiter">,</span> <span class="Normal">typename</span> T::mapped_type <span class="Normal">const</span>&amp; value<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L222" class="LineNr">222 </span> map[key] = value<span class="Delimiter">;</span>
<span id="L223" class="LineNr">223 </span> <span class="Identifier">return</span> map[key]<span class="Delimiter">;</span>
<span id="L224" class="LineNr">224 </span><span class="Delimiter">}</span>
<span id="L225" class="LineNr">225 </span><span class="Normal">template</span>&lt;<span class="Normal">typename</span> T&gt; <span class="Normal">bool</span> contains_key<span class="Delimiter">(</span>T&amp; map<span class="Delimiter">,</span> <span class="Normal">typename</span> T::key_type <span class="Normal">const</span>&amp; key<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L226" class="LineNr">226 </span> <span class="Identifier">return</span> map<span class="Delimiter">.</span>find<span class="Delimiter">(</span>key<span class="Delimiter">)</span> != map<span class="Delimiter">.</span><a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L227" class="LineNr">227 </span><span class="Delimiter">}</span>
<span id="L228" class="LineNr">228 </span><span class="Normal">template</span>&lt;<span class="Normal">typename</span> T&gt; <span class="Normal">typename</span> T::mapped_type&amp; <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>T&amp; map<span class="Delimiter">,</span> <span class="Normal">typename</span> T::key_type <span class="Normal">const</span>&amp; key<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L229" class="LineNr">229 </span> <span class="Identifier">return</span> map[key]<span class="Delimiter">;</span>
<span id="L230" class="LineNr">230 </span><span class="Delimiter">}</span>
<span id="L231" class="LineNr">231 </span><span class="Comment">//: The contract: any container that relies on get_or_insert should never call</span>
<span id="L232" class="LineNr">232 </span><span class="Comment">//: contains_key.</span>
<span id="L233" class="LineNr">233 </span>
<span id="L234" class="LineNr">234 </span><span class="Comment">//: 7. istreams are a royal pain in the arse. You have to be careful about</span>
<span id="L235" class="LineNr">235 </span><span class="Comment">//: what subclass you try to putback into. You have to watch out for the pesky</span>
<span id="L236" class="LineNr">236 </span><span class="Comment">//: failbit and badbit. Just avoid eof() and use this helper instead.</span>
<span id="L237" class="LineNr">237 </span><span class="Delimiter">:(code)</span>
<span id="L238" class="LineNr">238 </span><span class="Normal">bool</span> <a href='001help.cc.html#L238'>has_data</a><span class="Delimiter">(</span>istream&amp; in<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L239" class="LineNr">239 </span> <span class="Identifier">return</span> in &amp;&amp; !in<span class="Delimiter">.</span>eof<span class="Delimiter">();</span>
<span id="L240" class="LineNr">240 </span><span class="Delimiter">}</span>
<span id="L241" class="LineNr">241 </span>
<span id="L242" class="LineNr">242 </span><span class="Delimiter">:(before &quot;End Includes&quot;)</span>
<span id="L243" class="LineNr">243 </span><span class="PreProc">#include </span><span class="Constant">&lt;assert.h&gt;</span>
<span id="L244" class="LineNr">244 </span>
<span id="L245" class="LineNr">245 </span><span class="PreProc">#include </span><span class="Constant">&lt;iostream&gt;</span>
<span id="L246" class="LineNr">246 </span><span class="Normal">using</span> std::istream<span class="Delimiter">;</span>
<span id="L247" class="LineNr">247 </span><span class="Normal">using</span> std::ostream<span class="Delimiter">;</span>
<span id="L248" class="LineNr">248 </span><span class="Normal">using</span> std::iostream<span class="Delimiter">;</span>
<span id="L249" class="LineNr">249 </span><span class="Normal">using</span> std::cin<span class="Delimiter">;</span>
<span id="L250" class="LineNr">250 </span><span class="Normal">using</span> std::cout<span class="Delimiter">;</span>
<span id="L251" class="LineNr">251 </span><span class="Normal">using</span> std::cerr<span class="Delimiter">;</span>
<span id="L252" class="LineNr">252 </span><span class="PreProc">#include </span><span class="Constant">&lt;iomanip&gt;</span>
<span id="L253" class="LineNr">253 </span>
<span id="L254" class="LineNr">254 </span><span class="PreProc">#include </span><span class="Constant">&lt;string.h&gt;</span>
<span id="L255" class="LineNr">255 </span><span class="PreProc">#include </span><span class="Constant">&lt;string&gt;</span>
<span id="L256" class="LineNr">256 </span><span class="Normal">using</span> std::string<span class="Delimiter">;</span>
<span id="L257" class="LineNr">257 </span>
<span id="L258" class="LineNr">258 </span><span class="PreProc">#define unused __attribute__((unused))</span>
<span id="L259" class="LineNr">259 </span>
<span id="L260" class="LineNr">260 </span><span class="PreProc">#include </span><span class="Constant">&lt;algorithm&gt;</span>
<span id="L261" class="LineNr">261 </span><span class="Normal">using</span> std::min<span class="Delimiter">;</span>
<span id="L262" class="LineNr">262 </span><span class="Normal">using</span> std::max<span class="Delimiter">;</span>
<span id="L222" class="LineNr">222 </span> <span class="Comment">// map[key] requires mapped_type to have a zero-arg (default) constructor</span>
<span id="L223" class="LineNr">223 </span> map<span class="Delimiter">.</span>insert<span class="Delimiter">(</span>std::make_pair<span class="Delimiter">(</span>key<span class="Delimiter">,</span> value<span class="Delimiter">)).</span>first<span class="Delimiter">-&gt;</span>second = value<span class="Delimiter">;</span>
<span id="L224" class="LineNr">224 </span> <span class="Identifier">return</span> value<span class="Delimiter">;</span>
<span id="L225" class="LineNr">225 </span><span class="Delimiter">}</span>
<span id="L226" class="LineNr">226 </span><span class="Normal">template</span>&lt;<span class="Normal">typename</span> T&gt; <span class="Normal">bool</span> contains_key<span class="Delimiter">(</span>T&amp; map<span class="Delimiter">,</span> <span class="Normal">typename</span> T::key_type <span class="Normal">const</span>&amp; key<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L227" class="LineNr">227 </span> <span class="Identifier">return</span> map<span class="Delimiter">.</span>find<span class="Delimiter">(</span>key<span class="Delimiter">)</span> != map<span class="Delimiter">.</span><a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L228" class="LineNr">228 </span><span class="Delimiter">}</span>
<span id="L229" class="LineNr">229 </span><span class="Normal">template</span>&lt;<span class="Normal">typename</span> T&gt; <span class="Normal">typename</span> T::mapped_type&amp; <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>T&amp; map<span class="Delimiter">,</span> <span class="Normal">typename</span> T::key_type <span class="Normal">const</span>&amp; key<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L230" class="LineNr">230 </span> <span class="Identifier">return</span> map[key]<span class="Delimiter">;</span>
<span id="L231" class="LineNr">231 </span><span class="Delimiter">}</span>
<span id="L232" class="LineNr">232 </span><span class="Comment">//: The contract: any container that relies on get_or_insert should never call</span>
<span id="L233" class="LineNr">233 </span><span class="Comment">//: contains_key.</span>
<span id="L234" class="LineNr">234 </span>
<span id="L235" class="LineNr">235 </span><span class="Comment">//: 7. istreams are a royal pain in the arse. You have to be careful about</span>
<span id="L236" class="LineNr">236 </span><span class="Comment">//: what subclass you try to putback into. You have to watch out for the pesky</span>
<span id="L237" class="LineNr">237 </span><span class="Comment">//: failbit and badbit. Just avoid eof() and use this helper instead.</span>
<span id="L238" class="LineNr">238 </span><span class="Delimiter">:(code)</span>
<span id="L239" class="LineNr">239 </span><span class="Normal">bool</span> <a href='001help.cc.html#L239'>has_data</a><span class="Delimiter">(</span>istream&amp; in<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L240" class="LineNr">240 </span> <span class="Identifier">return</span> in &amp;&amp; !in<span class="Delimiter">.</span>eof<span class="Delimiter">();</span>
<span id="L241" class="LineNr">241 </span><span class="Delimiter">}</span>
<span id="L242" class="LineNr">242 </span>
<span id="L243" class="LineNr">243 </span><span class="Delimiter">:(before &quot;End Includes&quot;)</span>
<span id="L244" class="LineNr">244 </span><span class="PreProc">#include </span><span class="Constant">&lt;assert.h&gt;</span>
<span id="L245" class="LineNr">245 </span>
<span id="L246" class="LineNr">246 </span><span class="PreProc">#include </span><span class="Constant">&lt;iostream&gt;</span>
<span id="L247" class="LineNr">247 </span><span class="Normal">using</span> std::istream<span class="Delimiter">;</span>
<span id="L248" class="LineNr">248 </span><span class="Normal">using</span> std::ostream<span class="Delimiter">;</span>
<span id="L249" class="LineNr">249 </span><span class="Normal">using</span> std::iostream<span class="Delimiter">;</span>
<span id="L250" class="LineNr">250 </span><span class="Normal">using</span> std::cin<span class="Delimiter">;</span>
<span id="L251" class="LineNr">251 </span><span class="Normal">using</span> std::cout<span class="Delimiter">;</span>
<span id="L252" class="LineNr">252 </span><span class="Normal">using</span> std::cerr<span class="Delimiter">;</span>
<span id="L253" class="LineNr">253 </span><span class="PreProc">#include </span><span class="Constant">&lt;iomanip&gt;</span>
<span id="L254" class="LineNr">254 </span>
<span id="L255" class="LineNr">255 </span><span class="PreProc">#include </span><span class="Constant">&lt;string.h&gt;</span>
<span id="L256" class="LineNr">256 </span><span class="PreProc">#include </span><span class="Constant">&lt;string&gt;</span>
<span id="L257" class="LineNr">257 </span><span class="Normal">using</span> std::string<span class="Delimiter">;</span>
<span id="L258" class="LineNr">258 </span>
<span id="L259" class="LineNr">259 </span><span class="PreProc">#define unused __attribute__((unused))</span>
<span id="L260" class="LineNr">260 </span>
<span id="L261" class="LineNr">261 </span><span class="PreProc">#include </span><span class="Constant">&lt;algorithm&gt;</span>
<span id="L262" class="LineNr">262 </span><span class="Normal">using</span> std::min<span class="Delimiter">;</span>
<span id="L263" class="LineNr">263 </span><span class="Normal">using</span> std::max<span class="Delimiter">;</span>
</pre>
</body>
</html>

View File

@ -257,7 +257,7 @@ if ('onhashchange' in window) {
<span id="L196" class="LineNr">196 </span><span class="Delimiter">:(before &quot;End Types&quot;)</span>
<span id="L197" class="LineNr">197 </span><span class="Normal">struct</span> <a href='003trace.cc.html#L197'>end</a> <span class="Delimiter">{};</span>
<span id="L198" class="LineNr">198 </span><span class="Delimiter">:(code)</span>
<span id="L199" class="LineNr">199 </span>ostream&amp; <span class="Normal">operator</span>&lt;&lt;<span class="Delimiter">(</span>ostream&amp; os<span class="Delimiter">,</span> <a href='001help.cc.html#L258'>unused</a> <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L199" class="LineNr">199 </span>ostream&amp; <span class="Normal">operator</span>&lt;&lt;<span class="Delimiter">(</span>ostream&amp; os<span class="Delimiter">,</span> <a href='001help.cc.html#L259'>unused</a> <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L200" class="LineNr">200 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>Trace_stream<span class="Delimiter">)</span> Trace_stream<span class="Delimiter">-&gt;</span><a href='003trace.cc.html#L127'>newline</a><span class="Delimiter">();</span>
<span id="L201" class="LineNr">201 </span> <span class="Identifier">return</span> os<span class="Delimiter">;</span>
<span id="L202" class="LineNr">202 </span><span class="Delimiter">}</span>

View File

@ -196,18 +196,18 @@ if ('onhashchange' in window) {
<span id="L132" class="LineNr">132 </span> Next_type_ordinal = <span class="Constant">1</span><span class="Delimiter">;</span>
<span id="L133" class="LineNr">133 </span> <span class="Comment">// Mu Types Initialization</span>
<span id="L134" class="LineNr">134 </span> <a href='010vm.cc.html#L123'>type_ordinal</a> number = <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;number&quot;</span><span class="Delimiter">,</span> Next_type_ordinal++<span class="Delimiter">);</span>
<span id="L135" class="LineNr">135 </span> <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Type<span class="Delimiter">,</span> number<span class="Delimiter">).</span>name = <span class="Constant">&quot;number&quot;</span><span class="Delimiter">;</span>
<span id="L135" class="LineNr">135 </span> <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Type<span class="Delimiter">,</span> number<span class="Delimiter">).</span>name = <span class="Constant">&quot;number&quot;</span><span class="Delimiter">;</span>
<span id="L136" class="LineNr">136 </span> <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;location&quot;</span><span class="Delimiter">,</span> number<span class="Delimiter">);</span> <span class="Comment">// synonym of number to indicate we only care about its size</span>
<span id="L137" class="LineNr">137 </span> <a href='010vm.cc.html#L123'>type_ordinal</a> <a href='043space.cc.html#L82'>address</a> = <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;address&quot;</span><span class="Delimiter">,</span> Next_type_ordinal++<span class="Delimiter">);</span>
<span id="L138" class="LineNr">138 </span> <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Type<span class="Delimiter">,</span> <a href='043space.cc.html#L82'>address</a><span class="Delimiter">).</span>name = <span class="Constant">&quot;address&quot;</span><span class="Delimiter">;</span>
<span id="L138" class="LineNr">138 </span> <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Type<span class="Delimiter">,</span> <a href='043space.cc.html#L82'>address</a><span class="Delimiter">).</span>name = <span class="Constant">&quot;address&quot;</span><span class="Delimiter">;</span>
<span id="L139" class="LineNr">139 </span> <a href='010vm.cc.html#L123'>type_ordinal</a> boolean = <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;boolean&quot;</span><span class="Delimiter">,</span> Next_type_ordinal++<span class="Delimiter">);</span>
<span id="L140" class="LineNr">140 </span> <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Type<span class="Delimiter">,</span> boolean<span class="Delimiter">).</span>name = <span class="Constant">&quot;boolean&quot;</span><span class="Delimiter">;</span>
<span id="L140" class="LineNr">140 </span> <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Type<span class="Delimiter">,</span> boolean<span class="Delimiter">).</span>name = <span class="Constant">&quot;boolean&quot;</span><span class="Delimiter">;</span>
<span id="L141" class="LineNr">141 </span> <a href='010vm.cc.html#L123'>type_ordinal</a> character = <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;character&quot;</span><span class="Delimiter">,</span> Next_type_ordinal++<span class="Delimiter">);</span>
<span id="L142" class="LineNr">142 </span> <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Type<span class="Delimiter">,</span> character<span class="Delimiter">).</span>name = <span class="Constant">&quot;character&quot;</span><span class="Delimiter">;</span>
<span id="L142" class="LineNr">142 </span> <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Type<span class="Delimiter">,</span> character<span class="Delimiter">).</span>name = <span class="Constant">&quot;character&quot;</span><span class="Delimiter">;</span>
<span id="L143" class="LineNr">143 </span> <span class="Comment">// Array types are a special modifier to any other type. For example,</span>
<span id="L144" class="LineNr">144 </span> <span class="Comment">// array:number or array:address:boolean.</span>
<span id="L145" class="LineNr">145 </span> <a href='010vm.cc.html#L123'>type_ordinal</a> array = <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;array&quot;</span><span class="Delimiter">,</span> Next_type_ordinal++<span class="Delimiter">);</span>
<span id="L146" class="LineNr">146 </span> <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Type<span class="Delimiter">,</span> array<span class="Delimiter">).</span>name = <span class="Constant">&quot;array&quot;</span><span class="Delimiter">;</span>
<span id="L146" class="LineNr">146 </span> <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Type<span class="Delimiter">,</span> array<span class="Delimiter">).</span>name = <span class="Constant">&quot;array&quot;</span><span class="Delimiter">;</span>
<span id="L147" class="LineNr">147 </span> <span class="Comment">// End Mu Types Initialization</span>
<span id="L148" class="LineNr">148 </span><span class="Delimiter">}</span>
<span id="L149" class="LineNr">149 </span><span class="Normal">void</span> <a href='010vm.cc.html#L149'>teardown_types</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
@ -361,7 +361,7 @@ if ('onhashchange' in window) {
<span id="L297" class="LineNr">297 </span><span class="Delimiter">}</span>
<span id="L298" class="LineNr">298 </span>
<span id="L299" class="LineNr">299 </span><span class="Normal">void</span> slurp_properties<span class="Delimiter">(</span>istream&amp; in<span class="Delimiter">,</span> vector&lt;pair&lt;string<span class="Delimiter">,</span> string_tree*&gt; &gt;&amp; out<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L300" class="LineNr">300 </span> <span class="Normal">while</span> <span class="Delimiter">(</span><a href='001help.cc.html#L238'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Delimiter">{</span>
<span id="L300" class="LineNr">300 </span> <span class="Normal">while</span> <span class="Delimiter">(</span><a href='001help.cc.html#L239'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Delimiter">{</span>
<span id="L301" class="LineNr">301 </span> <span class="Conceal">¦</span> istringstream row<span class="Delimiter">(</span>slurp_until<span class="Delimiter">(</span>in<span class="Delimiter">,</span> <span class="Constant">'/'</span><span class="Delimiter">));</span>
<span id="L302" class="LineNr">302 </span> <span class="Conceal">¦</span> row &gt;&gt; std::noskipws<span class="Delimiter">;</span>
<span id="L303" class="LineNr">303 </span> <span class="Conceal">¦</span> string key = slurp_until<span class="Delimiter">(</span>row<span class="Delimiter">,</span> <span class="Constant">':'</span><span class="Delimiter">);</span>
@ -658,11 +658,11 @@ if ('onhashchange' in window) {
<span id="L594" class="LineNr">594 </span><span class="Comment">//: Use inspect() only for emitting a canonical format that can be parsed back</span>
<span id="L595" class="LineNr">595 </span><span class="Comment">//: into the value.</span>
<span id="L596" class="LineNr">596 </span>
<span id="L597" class="LineNr">597 </span>string <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span><span class="Normal">const</span> recipe&amp; r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L597" class="LineNr">597 </span>string <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span><span class="Normal">const</span> recipe&amp; r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L598" class="LineNr">598 </span> ostringstream out<span class="Delimiter">;</span>
<span id="L599" class="LineNr">599 </span> out &lt;&lt; <span class="Constant">&quot;recipe &quot;</span> &lt;&lt; r<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot; [</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span>
<span id="L600" class="LineNr">600 </span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span> i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>r<span class="Delimiter">.</span>steps<span class="Delimiter">);</span> ++i<span class="Delimiter">)</span>
<span id="L601" class="LineNr">601 </span> <span class="Conceal">¦</span> out &lt;&lt; <span class="Constant">&quot; &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>r<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">))</span> &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
<span id="L601" class="LineNr">601 </span> <span class="Conceal">¦</span> out &lt;&lt; <span class="Constant">&quot; &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>r<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">))</span> &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
<span id="L602" class="LineNr">602 </span> out &lt;&lt; <span class="Constant">&quot;]</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span>
<span id="L603" class="LineNr">603 </span> <span class="Identifier">return</span> out<span class="Delimiter">.</span>str<span class="Delimiter">();</span>
<span id="L604" class="LineNr">604 </span><span class="Delimiter">}</span>
@ -682,7 +682,7 @@ if ('onhashchange' in window) {
<span id="L618" class="LineNr">618 </span> <span class="Comment">// Begin debug_string(recipe x)</span>
<span id="L619" class="LineNr">619 </span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> index = <span class="Constant">0</span><span class="Delimiter">;</span> index &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>x<span class="Delimiter">.</span>steps<span class="Delimiter">);</span> ++index<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L620" class="LineNr">620 </span> <span class="Conceal">¦</span> <span class="Normal">const</span> instruction&amp; inst = x<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>index<span class="Delimiter">);</span>
<span id="L621" class="LineNr">621 </span> <span class="Conceal">¦</span> out &lt;&lt; <span class="Constant">&quot;inst: &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
<span id="L621" class="LineNr">621 </span> <span class="Conceal">¦</span> out &lt;&lt; <span class="Constant">&quot;inst: &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
<span id="L622" class="LineNr">622 </span> <span class="Conceal">¦</span> out &lt;&lt; <span class="Constant">&quot; ingredients</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span>
<span id="L623" class="LineNr">623 </span> <span class="Conceal">¦</span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span> i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span> ++i<span class="Delimiter">)</span>
<span id="L624" class="LineNr">624 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> out &lt;&lt; <span class="Constant">&quot; &quot;</span> &lt;&lt; debug_string<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">))</span> &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
@ -711,30 +711,30 @@ if ('onhashchange' in window) {
<span id="L647" class="LineNr">647 </span> <span class="Identifier">return</span> out<span class="Delimiter">.</span>str<span class="Delimiter">();</span>
<span id="L648" class="LineNr">648 </span><span class="Delimiter">}</span>
<span id="L649" class="LineNr">649 </span>
<span id="L650" class="LineNr">650 </span>string <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span><span class="Normal">const</span> instruction&amp; inst<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L650" class="LineNr">650 </span>string <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span><span class="Normal">const</span> instruction&amp; inst<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L651" class="LineNr">651 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>is_label<span class="Delimiter">)</span> <span class="Identifier">return</span> inst<span class="Delimiter">.</span>label<span class="Delimiter">;</span>
<span id="L652" class="LineNr">652 </span> ostringstream out<span class="Delimiter">;</span>
<span id="L653" class="LineNr">653 </span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span> i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">);</span> ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L654" class="LineNr">654 </span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>i &gt; <span class="Constant">0</span><span class="Delimiter">)</span> out &lt;&lt; <span class="Constant">&quot;, &quot;</span><span class="Delimiter">;</span>
<span id="L655" class="LineNr">655 </span> <span class="Conceal">¦</span> out &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">));</span>
<span id="L655" class="LineNr">655 </span> <span class="Conceal">¦</span> out &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">));</span>
<span id="L656" class="LineNr">656 </span> <span class="Delimiter">}</span>
<span id="L657" class="LineNr">657 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>!inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> out &lt;&lt; <span class="Constant">&quot; &lt;- &quot;</span><span class="Delimiter">;</span>
<span id="L658" class="LineNr">658 </span> out &lt;&lt; inst<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">' '</span><span class="Delimiter">;</span>
<span id="L659" class="LineNr">659 </span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span> i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span> ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L660" class="LineNr">660 </span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>i &gt; <span class="Constant">0</span><span class="Delimiter">)</span> out &lt;&lt; <span class="Constant">&quot;, &quot;</span><span class="Delimiter">;</span>
<span id="L661" class="LineNr">661 </span> <span class="Conceal">¦</span> out &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">));</span>
<span id="L661" class="LineNr">661 </span> <span class="Conceal">¦</span> out &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">));</span>
<span id="L662" class="LineNr">662 </span> <span class="Delimiter">}</span>
<span id="L663" class="LineNr">663 </span> <span class="Identifier">return</span> out<span class="Delimiter">.</span>str<span class="Delimiter">();</span>
<span id="L664" class="LineNr">664 </span><span class="Delimiter">}</span>
<span id="L665" class="LineNr">665 </span>
<span id="L666" class="LineNr">666 </span>string <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span><span class="Normal">const</span> reagent&amp; r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L666" class="LineNr">666 </span>string <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span><span class="Normal">const</span> reagent&amp; r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L667" class="LineNr">667 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>is_dummy<span class="Delimiter">(</span>r<span class="Delimiter">))</span> <span class="Identifier">return</span> <span class="Constant">&quot;_&quot;</span><span class="Delimiter">;</span>
<span id="L668" class="LineNr">668 </span> ostringstream out<span class="Delimiter">;</span>
<span id="L669" class="LineNr">669 </span> out &lt;&lt; <span class="Constant">&quot;{&quot;</span><span class="Delimiter">;</span>
<span id="L670" class="LineNr">670 </span> out &lt;&lt; r<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;: &quot;</span> &lt;&lt; names_to_string<span class="Delimiter">(</span>r<span class="Delimiter">.</span>type<span class="Delimiter">);</span>
<span id="L671" class="LineNr">671 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>!r<span class="Delimiter">.</span>properties<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
<span id="L672" class="LineNr">672 </span> <span class="Conceal">¦</span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span> i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>r<span class="Delimiter">.</span>properties<span class="Delimiter">);</span> ++i<span class="Delimiter">)</span>
<span id="L673" class="LineNr">673 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> out &lt;&lt; <span class="Constant">&quot;, </span><span class="cSpecial">\&quot;</span><span class="Constant">&quot;</span> &lt;&lt; r<span class="Delimiter">.</span>properties<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>first &lt;&lt; <span class="Constant">&quot;</span><span class="cSpecial">\&quot;</span><span class="Constant">: &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>r<span class="Delimiter">.</span>properties<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>second<span class="Delimiter">);</span>
<span id="L673" class="LineNr">673 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> out &lt;&lt; <span class="Constant">&quot;, </span><span class="cSpecial">\&quot;</span><span class="Constant">&quot;</span> &lt;&lt; r<span class="Delimiter">.</span>properties<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>first &lt;&lt; <span class="Constant">&quot;</span><span class="cSpecial">\&quot;</span><span class="Constant">: &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>r<span class="Delimiter">.</span>properties<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>second<span class="Delimiter">);</span>
<span id="L674" class="LineNr">674 </span> <span class="Delimiter">}</span>
<span id="L675" class="LineNr">675 </span> out &lt;&lt; <span class="Constant">&quot;}&quot;</span><span class="Delimiter">;</span>
<span id="L676" class="LineNr">676 </span> <span class="Identifier">return</span> out<span class="Delimiter">.</span>str<span class="Delimiter">();</span>
@ -747,11 +747,11 @@ if ('onhashchange' in window) {
<span id="L683" class="LineNr">683 </span>
<span id="L684" class="LineNr">684 </span>string debug_string<span class="Delimiter">(</span><span class="Normal">const</span> reagent&amp; x<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L685" class="LineNr">685 </span> ostringstream out<span class="Delimiter">;</span>
<span id="L686" class="LineNr">686 </span> out &lt;&lt; x<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;: &quot;</span> &lt;&lt; x<span class="Delimiter">.</span>value &lt;&lt; <span class="Constant">' '</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>x<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; -- &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>x<span class="Delimiter">);</span>
<span id="L686" class="LineNr">686 </span> out &lt;&lt; x<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;: &quot;</span> &lt;&lt; x<span class="Delimiter">.</span>value &lt;&lt; <span class="Constant">' '</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>x<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; -- &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>x<span class="Delimiter">);</span>
<span id="L687" class="LineNr">687 </span> <span class="Identifier">return</span> out<span class="Delimiter">.</span>str<span class="Delimiter">();</span>
<span id="L688" class="LineNr">688 </span><span class="Delimiter">}</span>
<span id="L689" class="LineNr">689 </span>
<span id="L690" class="LineNr">690 </span>string <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span><span class="Normal">const</span> string_tree* property<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L690" class="LineNr">690 </span>string <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span><span class="Normal">const</span> string_tree* property<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L691" class="LineNr">691 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>!property<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">&quot;()&quot;</span><span class="Delimiter">;</span>
<span id="L692" class="LineNr">692 </span> ostringstream out<span class="Delimiter">;</span>
<span id="L693" class="LineNr">693 </span> dump<span class="Delimiter">(</span>property<span class="Delimiter">,</span> out<span class="Delimiter">);</span>
@ -779,7 +779,7 @@ if ('onhashchange' in window) {
<span id="L715" class="LineNr">715 </span> out &lt;&lt; <span class="Constant">')'</span><span class="Delimiter">;</span>
<span id="L716" class="LineNr">716 </span><span class="Delimiter">}</span>
<span id="L717" class="LineNr">717 </span>
<span id="L718" class="LineNr">718 </span>string <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span><span class="Normal">const</span> type_tree* type<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L718" class="LineNr">718 </span>string <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span><span class="Normal">const</span> type_tree* type<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L719" class="LineNr">719 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>type == <span class="Constant">NULL</span><span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">&quot;()&quot;</span><span class="Delimiter">;</span>
<span id="L720" class="LineNr">720 </span> ostringstream out<span class="Delimiter">;</span>
<span id="L721" class="LineNr">721 </span> dump<span class="Delimiter">(</span>type<span class="Delimiter">,</span> out<span class="Delimiter">);</span>

View File

@ -86,7 +86,7 @@ if ('onhashchange' in window) {
<span id="L22" class="LineNr"> 22 </span>vector&lt;recipe_ordinal&gt; load<span class="Delimiter">(</span>istream&amp; in<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L23" class="LineNr"> 23 </span> in &gt;&gt; std::noskipws<span class="Delimiter">;</span>
<span id="L24" class="LineNr"> 24 </span> vector&lt;recipe_ordinal&gt; result<span class="Delimiter">;</span>
<span id="L25" class="LineNr"> 25 </span> <span class="Normal">while</span> <span class="Delimiter">(</span><a href='001help.cc.html#L238'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Delimiter">{</span>
<span id="L25" class="LineNr"> 25 </span> <span class="Normal">while</span> <span class="Delimiter">(</span><a href='001help.cc.html#L239'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Delimiter">{</span>
<span id="L26" class="LineNr"> 26 </span> <span class="Conceal">¦</span> <a href='011load.cc.html#L209'>skip_whitespace_and_comments</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
<span id="L27" class="LineNr"> 27 </span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L28" class="LineNr"> 28 </span> <span class="Conceal">¦</span> string command = <a href='011load.cc.html#L167'>next_word</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
@ -152,7 +152,7 @@ if ('onhashchange' in window) {
<span id="L88" class="LineNr"> 88 </span> <span class="Normal">while</span> <span class="Delimiter">(</span><a href='011load.cc.html#L96'>next_instruction</a><span class="Delimiter">(</span>in<span class="Delimiter">,</span> &amp;curr<span class="Delimiter">))</span> <span class="Delimiter">{</span>
<span id="L89" class="LineNr"> 89 </span> <span class="Conceal">¦</span> curr<span class="Delimiter">.</span>original_string = to_original_string<span class="Delimiter">(</span>curr<span class="Delimiter">);</span>
<span id="L90" class="LineNr"> 90 </span> <span class="Conceal">¦</span> <span class="Comment">// End Rewrite Instruction(curr, recipe result)</span>
<span id="L91" class="LineNr"> 91 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9992</span><span class="Delimiter">,</span> <span class="Constant">&quot;load&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;after rewriting: &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>curr<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L91" class="LineNr"> 91 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9992</span><span class="Delimiter">,</span> <span class="Constant">&quot;load&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;after rewriting: &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>curr<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L92" class="LineNr"> 92 </span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!curr<span class="Delimiter">.</span>is_empty<span class="Delimiter">())</span> result<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>curr<span class="Delimiter">);</span>
<span id="L93" class="LineNr"> 93 </span> <span class="Delimiter">}</span>
<span id="L94" class="LineNr"> 94 </span><span class="Delimiter">}</span>
@ -166,7 +166,7 @@ if ('onhashchange' in window) {
<span id="L102" class="LineNr">102 </span> <span class="Delimiter">}</span>
<span id="L103" class="LineNr">103 </span>
<span id="L104" class="LineNr">104 </span> vector&lt;string&gt; words<span class="Delimiter">;</span>
<span id="L105" class="LineNr">105 </span> <span class="Normal">while</span> <span class="Delimiter">(</span><a href='001help.cc.html#L238'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">)</span> &amp;&amp; in<span class="Delimiter">.</span>peek<span class="Delimiter">()</span> != <span class="cSpecial">'\n'</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L105" class="LineNr">105 </span> <span class="Normal">while</span> <span class="Delimiter">(</span><a href='001help.cc.html#L239'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">)</span> &amp;&amp; in<span class="Delimiter">.</span>peek<span class="Delimiter">()</span> != <span class="cSpecial">'\n'</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L106" class="LineNr">106 </span> <span class="Conceal">¦</span> skip_whitespace_but_not_newline<span class="Delimiter">(</span>in<span class="Delimiter">);</span>
<span id="L107" class="LineNr">107 </span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Delimiter">{</span>
<span id="L108" class="LineNr">108 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;incomplete <a href='010vm.cc.html#L19'>recipe</a> at <a href='003trace.cc.html#L197'>end</a> of file (1)</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
@ -216,9 +216,9 @@ if ('onhashchange' in window) {
<span id="L152" class="LineNr">152 </span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;parse&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;instruction: &quot;</span> &lt;&lt; curr<span class="Delimiter">-&gt;</span>name &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L153" class="LineNr">153 </span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;parse&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; number of ingredients: &quot;</span> &lt;&lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>curr<span class="Delimiter">-&gt;</span>ingredients<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L154" class="LineNr">154 </span> <span class="Normal">for</span> <span class="Delimiter">(</span>vector&lt;reagent&gt;::iterator p = curr<span class="Delimiter">-&gt;</span>ingredients<span class="Delimiter">.</span>begin<span class="Delimiter">();</span> p != curr<span class="Delimiter">-&gt;</span>ingredients<span class="Delimiter">.</span><a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span> ++p<span class="Delimiter">)</span>
<span id="L155" class="LineNr">155 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;parse&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; ingredient: &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>*p<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L155" class="LineNr">155 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;parse&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; ingredient: &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>*p<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L156" class="LineNr">156 </span> <span class="Normal">for</span> <span class="Delimiter">(</span>vector&lt;reagent&gt;::iterator p = curr<span class="Delimiter">-&gt;</span>products<span class="Delimiter">.</span>begin<span class="Delimiter">();</span> p != curr<span class="Delimiter">-&gt;</span>products<span class="Delimiter">.</span><a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span> ++p<span class="Delimiter">)</span>
<span id="L157" class="LineNr">157 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;parse&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; product: &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>*p<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L157" class="LineNr">157 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;parse&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; product: &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>*p<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L158" class="LineNr">158 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Delimiter">{</span>
<span id="L159" class="LineNr">159 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;9: unbalanced '[' for <a href='010vm.cc.html#L19'>recipe</a></span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L160" class="LineNr">160 </span> <span class="Conceal">¦</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
@ -256,7 +256,7 @@ if ('onhashchange' in window) {
<span id="L192" class="LineNr">192 </span><span class="Delimiter">:(code)</span>
<span id="L193" class="LineNr">193 </span><span class="Normal">void</span> <a href='011load.cc.html#L193'>slurp_word</a><span class="Delimiter">(</span>istream&amp; in<span class="Delimiter">,</span> ostream&amp; out<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L194" class="LineNr">194 </span> <span class="Normal">char</span> c<span class="Delimiter">;</span>
<span id="L195" class="LineNr">195 </span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L238'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">)</span> &amp;&amp; Terminators<span class="Delimiter">.</span>find<span class="Delimiter">(</span>in<span class="Delimiter">.</span>peek<span class="Delimiter">())</span> != string::npos<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L195" class="LineNr">195 </span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L239'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">)</span> &amp;&amp; Terminators<span class="Delimiter">.</span>find<span class="Delimiter">(</span>in<span class="Delimiter">.</span>peek<span class="Delimiter">())</span> != string::npos<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L196" class="LineNr">196 </span> <span class="Conceal">¦</span> in &gt;&gt; c<span class="Delimiter">;</span>
<span id="L197" class="LineNr">197 </span> <span class="Conceal">¦</span> out &lt;&lt; c<span class="Delimiter">;</span>
<span id="L198" class="LineNr">198 </span> <span class="Conceal">¦</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
@ -293,9 +293,9 @@ if ('onhashchange' in window) {
<span id="L229" class="LineNr">229 </span><span class="Delimiter">}</span>
<span id="L230" class="LineNr">230 </span>
<span id="L231" class="LineNr">231 </span><span class="Normal">void</span> <a href='011load.cc.html#L231'>skip_comment</a><span class="Delimiter">(</span>istream&amp; in<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L232" class="LineNr">232 </span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L238'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">)</span> &amp;&amp; in<span class="Delimiter">.</span>peek<span class="Delimiter">()</span> == <span class="Constant">'#'</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L232" class="LineNr">232 </span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L239'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">)</span> &amp;&amp; in<span class="Delimiter">.</span>peek<span class="Delimiter">()</span> == <span class="Constant">'#'</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L233" class="LineNr">233 </span> <span class="Conceal">¦</span> in<span class="Delimiter">.</span>get<span class="Delimiter">();</span>
<span id="L234" class="LineNr">234 </span> <span class="Conceal">¦</span> <span class="Normal">while</span> <span class="Delimiter">(</span><a href='001help.cc.html#L238'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">)</span> &amp;&amp; in<span class="Delimiter">.</span>peek<span class="Delimiter">()</span> != <span class="cSpecial">'\n'</span><span class="Delimiter">)</span> in<span class="Delimiter">.</span>get<span class="Delimiter">();</span>
<span id="L234" class="LineNr">234 </span> <span class="Conceal">¦</span> <span class="Normal">while</span> <span class="Delimiter">(</span><a href='001help.cc.html#L239'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">)</span> &amp;&amp; in<span class="Delimiter">.</span>peek<span class="Delimiter">()</span> != <span class="cSpecial">'\n'</span><span class="Delimiter">)</span> in<span class="Delimiter">.</span>get<span class="Delimiter">();</span>
<span id="L235" class="LineNr">235 </span> <span class="Delimiter">}</span>
<span id="L236" class="LineNr">236 </span><span class="Delimiter">}</span>
<span id="L237" class="LineNr">237 </span>

View File

@ -95,7 +95,7 @@ if ('onhashchange' in window) {
<span id="L32" class="LineNr"> 32 </span><span class="Delimiter">:(code)</span>
<span id="L33" class="LineNr"> 33 </span>string <a href='014literal_string.cc.html#L33'>slurp_quoted</a><span class="Delimiter">(</span>istream&amp; in<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L34" class="LineNr"> 34 </span> ostringstream out<span class="Delimiter">;</span>
<span id="L35" class="LineNr"> 35 </span> assert<span class="Delimiter">(</span><a href='001help.cc.html#L238'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">));</span> assert<span class="Delimiter">(</span>in<span class="Delimiter">.</span>peek<span class="Delimiter">()</span> == <span class="Constant">'['</span><span class="Delimiter">);</span> out &lt;&lt; <span class="Normal">static_cast</span>&lt;<span class="Normal">char</span>&gt;<span class="Delimiter">(</span>in<span class="Delimiter">.</span>get<span class="Delimiter">());</span> <span class="Comment">// slurp the '['</span>
<span id="L35" class="LineNr"> 35 </span> assert<span class="Delimiter">(</span><a href='001help.cc.html#L239'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">));</span> assert<span class="Delimiter">(</span>in<span class="Delimiter">.</span>peek<span class="Delimiter">()</span> == <span class="Constant">'['</span><span class="Delimiter">);</span> out &lt;&lt; <span class="Normal">static_cast</span>&lt;<span class="Normal">char</span>&gt;<span class="Delimiter">(</span>in<span class="Delimiter">.</span>get<span class="Delimiter">());</span> <span class="Comment">// slurp the '['</span>
<span id="L36" class="LineNr"> 36 </span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='014literal_string.cc.html#L45'>is_code_string</a><span class="Delimiter">(</span>in<span class="Delimiter">,</span> out<span class="Delimiter">))</span>
<span id="L37" class="LineNr"> 37 </span> <span class="Conceal">¦</span> <a href='014literal_string.cc.html#L82'>slurp_quoted_comment_aware</a><span class="Delimiter">(</span>in<span class="Delimiter">,</span> out<span class="Delimiter">);</span>
<span id="L38" class="LineNr"> 38 </span> <span class="Normal">else</span>
@ -106,7 +106,7 @@ if ('onhashchange' in window) {
<span id="L43" class="LineNr"> 43 </span><span class="Comment">// A string is a code string (ignores comments when scanning for matching</span>
<span id="L44" class="LineNr"> 44 </span><span class="Comment">// brackets) if it contains a newline at the start before any non-whitespace.</span>
<span id="L45" class="LineNr"> 45 </span><span class="Normal">bool</span> <a href='014literal_string.cc.html#L45'>is_code_string</a><span class="Delimiter">(</span>istream&amp; in<span class="Delimiter">,</span> ostream&amp; out<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L46" class="LineNr"> 46 </span> <span class="Normal">while</span> <span class="Delimiter">(</span><a href='001help.cc.html#L238'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Delimiter">{</span>
<span id="L46" class="LineNr"> 46 </span> <span class="Normal">while</span> <span class="Delimiter">(</span><a href='001help.cc.html#L239'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Delimiter">{</span>
<span id="L47" class="LineNr"> 47 </span> <span class="Conceal">¦</span> <span class="Normal">char</span> c = in<span class="Delimiter">.</span>get<span class="Delimiter">();</span>
<span id="L48" class="LineNr"> 48 </span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!isspace<span class="Delimiter">(</span>c<span class="Delimiter">))</span> <span class="Delimiter">{</span>
<span id="L49" class="LineNr"> 49 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> in<span class="Delimiter">.</span>putback<span class="Delimiter">(</span>c<span class="Delimiter">);</span>
@ -124,7 +124,7 @@ if ('onhashchange' in window) {
<span id="L61" class="LineNr"> 61 </span><span class="Comment">// strings.</span>
<span id="L62" class="LineNr"> 62 </span><span class="Normal">void</span> <a href='014literal_string.cc.html#L62'>slurp_quoted_comment_oblivious</a><span class="Delimiter">(</span>istream&amp; in<span class="Delimiter">,</span> ostream&amp; out<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L63" class="LineNr"> 63 </span> <span class="Normal">int</span> brace_depth = <span class="Constant">1</span><span class="Delimiter">;</span>
<span id="L64" class="LineNr"> 64 </span> <span class="Normal">while</span> <span class="Delimiter">(</span><a href='001help.cc.html#L238'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Delimiter">{</span>
<span id="L64" class="LineNr"> 64 </span> <span class="Normal">while</span> <span class="Delimiter">(</span><a href='001help.cc.html#L239'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Delimiter">{</span>
<span id="L65" class="LineNr"> 65 </span> <span class="Conceal">¦</span> <span class="Normal">char</span> c = in<span class="Delimiter">.</span>get<span class="Delimiter">();</span>
<span id="L66" class="LineNr"> 66 </span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>c == <span class="cSpecial">'\\'</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L67" class="LineNr"> 67 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='014literal_string.cc.html#L148'>slurp_one_past_backslashes</a><span class="Delimiter">(</span>in<span class="Delimiter">,</span> out<span class="Delimiter">);</span>
@ -151,7 +151,7 @@ if ('onhashchange' in window) {
<span id="L88" class="LineNr"> 88 </span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>
<span id="L89" class="LineNr"> 89 </span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>c == <span class="Constant">'#'</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L90" class="LineNr"> 90 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> out &lt;&lt; c<span class="Delimiter">;</span>
<span id="L91" class="LineNr"> 91 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">while</span> <span class="Delimiter">(</span><a href='001help.cc.html#L238'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">)</span> &amp;&amp; in<span class="Delimiter">.</span>peek<span class="Delimiter">()</span> != <span class="cSpecial">'\n'</span><span class="Delimiter">)</span> out &lt;&lt; <span class="Normal">static_cast</span>&lt;<span class="Normal">char</span>&gt;<span class="Delimiter">(</span>in<span class="Delimiter">.</span>get<span class="Delimiter">());</span>
<span id="L91" class="LineNr"> 91 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">while</span> <span class="Delimiter">(</span><a href='001help.cc.html#L239'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">)</span> &amp;&amp; in<span class="Delimiter">.</span>peek<span class="Delimiter">()</span> != <span class="cSpecial">'\n'</span><span class="Delimiter">)</span> out &lt;&lt; <span class="Normal">static_cast</span>&lt;<span class="Normal">char</span>&gt;<span class="Delimiter">(</span>in<span class="Delimiter">.</span>get<span class="Delimiter">());</span>
<span id="L92" class="LineNr"> 92 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
<span id="L93" class="LineNr"> 93 </span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>
<span id="L94" class="LineNr"> 94 </span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>c == <span class="Constant">'['</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
@ -223,7 +223,7 @@ if ('onhashchange' in window) {
<span id="L160" class="LineNr">160 </span> <span class="Comment">// special characters. So Mu doesn't follow C's approach of overloading</span>
<span id="L161" class="LineNr">161 </span> <span class="Comment">// backslashes both to escape quote characters and also as a notation for</span>
<span id="L162" class="LineNr">162 </span> <span class="Comment">// unprintable characters like '\n'.</span>
<span id="L163" class="LineNr">163 </span> <span class="Normal">while</span> <span class="Delimiter">(</span><a href='001help.cc.html#L238'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Delimiter">{</span>
<span id="L163" class="LineNr">163 </span> <span class="Normal">while</span> <span class="Delimiter">(</span><a href='001help.cc.html#L239'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Delimiter">{</span>
<span id="L164" class="LineNr">164 </span> <span class="Conceal">¦</span> <span class="Normal">char</span> c = in<span class="Delimiter">.</span>get<span class="Delimiter">();</span>
<span id="L165" class="LineNr">165 </span> <span class="Conceal">¦</span> out &lt;&lt; c<span class="Delimiter">;</span>
<span id="L166" class="LineNr">166 </span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>c != <span class="cSpecial">'\\'</span><span class="Delimiter">)</span> <span class="Identifier">break</span><span class="Delimiter">;</span>

View File

@ -183,7 +183,7 @@ if ('onhashchange' in window) {
<span id="L118" class="LineNr">118 </span> <span class="Conceal">¦</span> type = <a href='018type_abbreviations.cc.html#L58'>new_type_tree</a><span class="Delimiter">(</span>type_names<span class="Delimiter">);</span>
<span id="L119" class="LineNr">119 </span> <span class="Conceal">¦</span> <span class="Normal">delete</span> type_names<span class="Delimiter">;</span>
<span id="L120" class="LineNr">120 </span> <span class="Delimiter">}</span>
<span id="L121" class="LineNr">121 </span> <span class="Normal">while</span> <span class="Delimiter">(</span><a href='001help.cc.html#L238'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Delimiter">{</span>
<span id="L121" class="LineNr">121 </span> <span class="Normal">while</span> <span class="Delimiter">(</span><a href='001help.cc.html#L239'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Delimiter">{</span>
<span id="L122" class="LineNr">122 </span> <span class="Conceal">¦</span> string key = <a href='016dilated_reagent.cc.html#L139'>slurp_key</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
<span id="L123" class="LineNr">123 </span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>key<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
<span id="L124" class="LineNr">124 </span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>key == <span class="Constant">&quot;}&quot;</span><span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>

View File

@ -123,7 +123,7 @@ if ('onhashchange' in window) {
<span id="L59" class="LineNr"> 59 </span> string_tree** curr = &amp;result<span class="Delimiter">;</span>
<span id="L60" class="LineNr"> 60 </span> <span class="Normal">while</span> <span class="Delimiter">(</span><span class="Constant">true</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L61" class="LineNr"> 61 </span> <span class="Conceal">¦</span> skip_whitespace_but_not_newline<span class="Delimiter">(</span>in<span class="Delimiter">);</span>
<span id="L62" class="LineNr"> 62 </span> <span class="Conceal">¦</span> assert<span class="Delimiter">(</span><a href='001help.cc.html#L238'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">));</span>
<span id="L62" class="LineNr"> 62 </span> <span class="Conceal">¦</span> assert<span class="Delimiter">(</span><a href='001help.cc.html#L239'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">));</span>
<span id="L63" class="LineNr"> 63 </span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>in<span class="Delimiter">.</span>peek<span class="Delimiter">()</span> == <span class="Constant">')'</span><span class="Delimiter">)</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L64" class="LineNr"> 64 </span> <span class="Conceal">¦</span> *curr = <span class="Normal">new</span> string_tree<span class="Delimiter">(</span><span class="Constant">NULL</span><span class="Delimiter">,</span> <span class="Constant">NULL</span><span class="Delimiter">);</span>
<span id="L65" class="LineNr"> 65 </span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>in<span class="Delimiter">.</span>peek<span class="Delimiter">()</span> == <span class="Constant">'('</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>

View File

@ -86,13 +86,13 @@ if ('onhashchange' in window) {
<span id="L21" class="LineNr"> 21 </span><span class="Delimiter">:(code)</span>
<span id="L22" class="LineNr"> 22 </span><span class="Normal">void</span> <a href='018type_abbreviations.cc.html#L22'>load_type_abbreviations</a><span class="Delimiter">(</span>istream&amp; in<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L23" class="LineNr"> 23 </span> string new_type_name = <a href='011load.cc.html#L167'>next_word</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
<span id="L24" class="LineNr"> 24 </span> assert<span class="Delimiter">(</span><a href='001help.cc.html#L238'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">)</span> || !new_type_name<span class="Delimiter">.</span>empty<span class="Delimiter">());</span>
<span id="L24" class="LineNr"> 24 </span> assert<span class="Delimiter">(</span><a href='001help.cc.html#L239'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">)</span> || !new_type_name<span class="Delimiter">.</span>empty<span class="Delimiter">());</span>
<span id="L25" class="LineNr"> 25 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">)</span> || new_type_name<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
<span id="L26" class="LineNr"> 26 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;incomplete 'type' statement; must be of the form 'type &lt;new type name&gt; = &lt;type expression&gt;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L27" class="LineNr"> 27 </span> <span class="Conceal">¦</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
<span id="L28" class="LineNr"> 28 </span> <span class="Delimiter">}</span>
<span id="L29" class="LineNr"> 29 </span> string arrow = <a href='011load.cc.html#L167'>next_word</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
<span id="L30" class="LineNr"> 30 </span> assert<span class="Delimiter">(</span><a href='001help.cc.html#L238'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">)</span> || !arrow<span class="Delimiter">.</span>empty<span class="Delimiter">());</span>
<span id="L30" class="LineNr"> 30 </span> assert<span class="Delimiter">(</span><a href='001help.cc.html#L239'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">)</span> || !arrow<span class="Delimiter">.</span>empty<span class="Delimiter">());</span>
<span id="L31" class="LineNr"> 31 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>arrow<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
<span id="L32" class="LineNr"> 32 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;incomplete 'type' statement 'type &quot;</span> &lt;&lt; new_type_name &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L33" class="LineNr"> 33 </span> <span class="Conceal">¦</span> <span class="Identifier">return</span><span class="Delimiter">;</span>

View File

@ -130,9 +130,9 @@ if ('onhashchange' in window) {
<span id="L63" class="LineNr"> 63 </span> <span class="Normal">while</span> <span class="Delimiter">(</span><a href='073scheduler.cc.html#L28'>should_continue_running</a><span class="Delimiter">(</span>Current_routine<span class="Delimiter">))</span> <span class="Delimiter">{</span> <span class="Comment">// beware: may modify Current_routine</span>
<span id="L64" class="LineNr"> 64 </span> <span class="Conceal">¦</span> <span class="Comment">// Running One Instruction</span>
<span id="L65" class="LineNr"> 65 </span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='026call.cc.html#L87'>current_instruction</a><span class="Delimiter">().</span>is_label<span class="Delimiter">)</span> <span class="Delimiter">{</span> ++current_step_index<span class="Delimiter">();</span> <span class="Identifier">continue</span><span class="Delimiter">;</span> <span class="Delimiter">}</span>
<span id="L66" class="LineNr"> 66 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span>Initial_callstack_depth + Trace_stream<span class="Delimiter">-&gt;</span>callstack_depth<span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span><a href='026call.cc.html#L87'>current_instruction</a><span class="Delimiter">())</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L66" class="LineNr"> 66 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span>Initial_callstack_depth + Trace_stream<span class="Delimiter">-&gt;</span>callstack_depth<span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span><a href='026call.cc.html#L87'>current_instruction</a><span class="Delimiter">())</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L67" class="LineNr"> 67 </span><span class="CommentedCode">//? if (Foo) cerr &lt;&lt; &quot;run: &quot; &lt;&lt; to_string(current_instruction()) &lt;&lt; '\n';</span>
<span id="L68" class="LineNr"> 68 </span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">)</span> != <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L68" class="LineNr"> 68 </span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">)</span> != <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L69" class="LineNr"> 69 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;something wrote to location 0; this should never happen</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L70" class="LineNr"> 70 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">);</span>
<span id="L71" class="LineNr"> 71 </span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>
@ -362,7 +362,7 @@ if ('onhashchange' in window) {
<span id="L295" class="LineNr">295 </span> <span class="Comment">// End Preprocess read_memory(x)</span>
<span id="L296" class="LineNr">296 </span> <span class="Normal">int</span> size = size_of<span class="Delimiter">(</span>x<span class="Delimiter">);</span>
<span id="L297" class="LineNr">297 </span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> offset = <span class="Constant">0</span><span class="Delimiter">;</span> offset &lt; size<span class="Delimiter">;</span> ++offset<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L298" class="LineNr">298 </span> <span class="Conceal">¦</span> <span class="Normal">double</span> val = <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> x<span class="Delimiter">.</span>value+offset<span class="Delimiter">);</span>
<span id="L298" class="LineNr">298 </span> <span class="Conceal">¦</span> <span class="Normal">double</span> val = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> x<span class="Delimiter">.</span>value+offset<span class="Delimiter">);</span>
<span id="L299" class="LineNr">299 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;location &quot;</span> &lt;&lt; x<span class="Delimiter">.</span>value+offset &lt;&lt; <span class="Constant">&quot; is &quot;</span> &lt;&lt; no_scientific<span class="Delimiter">(</span>val<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L300" class="LineNr">300 </span> <span class="Conceal">¦</span> result<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>val<span class="Delimiter">);</span>
<span id="L301" class="LineNr">301 </span> <span class="Delimiter">}</span>
@ -373,7 +373,7 @@ if ('onhashchange' in window) {
<span id="L306" class="LineNr">306 </span> assert<span class="Delimiter">(</span>Current_routine<span class="Delimiter">);</span> <span class="Comment">// run-time only</span>
<span id="L307" class="LineNr">307 </span> <span class="Comment">// Begin Preprocess write_memory(x, data)</span>
<span id="L308" class="LineNr">308 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>!x<span class="Delimiter">.</span>type<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L309" class="LineNr">309 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;can't write to '&quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>x<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'; no type</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
<span id="L309" class="LineNr">309 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;can't write to '&quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>x<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'; no type</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
<span id="L310" class="LineNr">310 </span> <span class="Conceal">¦</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
<span id="L311" class="LineNr">311 </span> <span class="Delimiter">}</span>
<span id="L312" class="LineNr">312 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>is_dummy<span class="Delimiter">(</span>x<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
@ -411,7 +411,7 @@ if ('onhashchange' in window) {
<span id="L344" class="LineNr">344 </span> <span class="Delimiter">}</span>
<span id="L345" class="LineNr">345 </span> <span class="Normal">else</span> <span class="Delimiter">{</span>
<span id="L346" class="LineNr">346 </span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L347" class="LineNr">347 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;invalid type &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L347" class="LineNr">347 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;invalid type &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L348" class="LineNr">348 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Identifier">return</span> <span class="Constant">0</span><span class="Delimiter">;</span>
<span id="L349" class="LineNr">349 </span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>
<span id="L350" class="LineNr">350 </span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>value == get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;address&quot;</span><span class="Delimiter">))</span> <span class="Identifier">return</span> <span class="Constant">1</span><span class="Delimiter">;</span>

View File

@ -271,7 +271,7 @@ if ('onhashchange' in window) {
<span id="L208" class="LineNr">208 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>is_literal<span class="Delimiter">(</span>type<span class="Delimiter">))</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
<span id="L209" class="LineNr">209 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
<span id="L210" class="LineNr">210 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L211" class="LineNr">211 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;invalid type &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L211" class="LineNr">211 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;invalid type &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L212" class="LineNr">212 </span> <span class="Conceal">¦</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
<span id="L213" class="LineNr">213 </span> <span class="Delimiter">}</span>
<span id="L214" class="LineNr">214 </span> <span class="Identifier">return</span> type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>value == get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;array&quot;</span><span class="Delimiter">);</span>
@ -286,7 +286,7 @@ if ('onhashchange' in window) {
<span id="L223" class="LineNr">223 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>is_literal<span class="Delimiter">(</span>type<span class="Delimiter">))</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
<span id="L224" class="LineNr">224 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
<span id="L225" class="LineNr">225 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L226" class="LineNr">226 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;invalid type &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L226" class="LineNr">226 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;invalid type &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L227" class="LineNr">227 </span> <span class="Conceal">¦</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
<span id="L228" class="LineNr">228 </span> <span class="Delimiter">}</span>
<span id="L229" class="LineNr">229 </span> <span class="Identifier">return</span> type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>value == get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;address&quot;</span><span class="Delimiter">);</span>

View File

@ -269,6 +269,21 @@ if ('onhashchange' in window) {
<span id="L203" class="LineNr">203 </span> <span class="Comment">// todo: fail if no products returned</span>
<span id="L204" class="LineNr">204 </span> ++current_step_index<span class="Delimiter">();</span>
<span id="L205" class="LineNr">205 </span><span class="Delimiter">}</span>
<span id="L206" class="LineNr">206 </span>
<span id="L207" class="LineNr">207 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
<span id="L208" class="LineNr">208 </span>_DUMP_CALL_STACK<span class="Delimiter">,</span>
<span id="L209" class="LineNr">209 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
<span id="L210" class="LineNr">210 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;$dump-call-stack&quot;</span><span class="Delimiter">,</span> _DUMP_CALL_STACK<span class="Delimiter">);</span>
<span id="L211" class="LineNr">211 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
<span id="L212" class="LineNr">212 </span><span class="Normal">case</span> _DUMP_CALL_STACK: <span class="Delimiter">{</span>
<span id="L213" class="LineNr">213 </span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L214" class="LineNr">214 </span><span class="Delimiter">}</span>
<span id="L215" class="LineNr">215 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
<span id="L216" class="LineNr">216 </span><span class="Normal">case</span> _DUMP_CALL_STACK: <span class="Delimiter">{</span>
<span id="L217" class="LineNr">217 </span> <span class="Normal">for</span> <span class="Delimiter">(</span>call_stack::const_reverse_iterator p = Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span>rbegin<span class="Delimiter">();</span> p != Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span>rend<span class="Delimiter">();</span> ++p<span class="Delimiter">)</span>
<span id="L218" class="LineNr">218 </span> <span class="Conceal">¦</span> cerr &lt;&lt; get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> p<span class="Delimiter">-&gt;</span>running_recipe<span class="Delimiter">).</span>name &lt;&lt; <span class="Constant">&quot;:&quot;</span> &lt;&lt; p<span class="Delimiter">-&gt;</span>running_step_index &lt;&lt; <span class="Constant">&quot; -- &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span><a href='026call.cc.html#L86'>to_instruction</a><span class="Delimiter">(</span>*p<span class="Delimiter">))</span> &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
<span id="L219" class="LineNr">219 </span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L220" class="LineNr">220 </span><span class="Delimiter">}</span>
</pre>
</body>
</html>

View File

@ -103,152 +103,155 @@ if ('onhashchange' in window) {
<span id="L40" class="LineNr"> 40 </span>NEXT_INGREDIENT<span class="Delimiter">,</span>
<span id="L41" class="LineNr"> 41 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
<span id="L42" class="LineNr"> 42 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;next-ingredient&quot;</span><span class="Delimiter">,</span> NEXT_INGREDIENT<span class="Delimiter">);</span>
<span id="L43" class="LineNr"> 43 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
<span id="L44" class="LineNr"> 44 </span><span class="Normal">case</span> NEXT_INGREDIENT: <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>ingredients<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
<span id="L46" class="LineNr"> 46 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'next-ingredient' didn't expect any ingredients in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
<span id="L47" class="LineNr"> 47 </span> <span class="Conceal">¦</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L48" class="LineNr"> 48 </span> <span class="Delimiter">}</span>
<span id="L49" class="LineNr"> 49 </span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L50" class="LineNr"> 50 </span><span class="Delimiter">}</span>
<span id="L51" class="LineNr"> 51 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
<span id="L52" class="LineNr"> 52 </span><span class="Normal">case</span> NEXT_INGREDIENT: <span class="Delimiter">{</span>
<span id="L53" class="LineNr"> 53 </span> assert<span class="Delimiter">(</span>!Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span>empty<span class="Delimiter">());</span>
<span id="L54" class="LineNr"> 54 </span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='026call.cc.html#L81'>current_call</a><span class="Delimiter">().</span>next_ingredient_to_process &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span><a href='026call.cc.html#L81'>current_call</a><span class="Delimiter">().</span>ingredient_atoms<span class="Delimiter">))</span> <span class="Delimiter">{</span>
<span id="L55" class="LineNr"> 55 </span> <span class="Conceal">¦</span> reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> product = <a href='026call.cc.html#L87'>current_instruction</a><span class="Delimiter">().</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
<span id="L56" class="LineNr"> 56 </span> <span class="Conceal">¦</span> <span class="Comment">// End Preprocess NEXT_INGREDIENT product</span>
<span id="L57" class="LineNr"> 57 </span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">()</span> == <span class="Constant">&quot;main&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L58" class="LineNr"> 58 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Comment">// no ingredient types since the call might be implicit; assume ingredients are always strings</span>
<span id="L59" class="LineNr"> 59 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Comment">// todo: how to test this?</span>
<span id="L60" class="LineNr"> 60 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_text<span class="Delimiter">(</span>product<span class="Delimiter">))</span>
<span id="L61" class="LineNr"> 61 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;main: wrong type for ingredient '&quot;</span> &lt;&lt; product<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L62" class="LineNr"> 62 </span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>
<span id="L63" class="LineNr"> 63 </span> <span class="Conceal">¦</span> <span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!types_coercible<span class="Delimiter">(</span>product<span class="Delimiter">,</span>
<span id="L64" class="LineNr"> 64 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='026call.cc.html#L81'>current_call</a><span class="Delimiter">().</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><a href='026call.cc.html#L81'>current_call</a><span class="Delimiter">().</span>next_ingredient_to_process<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
<span id="L65" class="LineNr"> 65 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span><a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;wrong type for ingredient '&quot;</span> &lt;&lt; product<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L66" class="LineNr"> 66 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Comment">// End next-ingredient Type Mismatch Error</span>
<span id="L67" class="LineNr"> 67 </span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>
<span id="L68" class="LineNr"> 68 </span> <span class="Conceal">¦</span> products<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>
<span id="L69" class="LineNr"> 69 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='026call.cc.html#L81'>current_call</a><span class="Delimiter">().</span>ingredient_atoms<span class="Delimiter">.</span>at<span class="Delimiter">(</span><a href='026call.cc.html#L81'>current_call</a><span class="Delimiter">().</span>next_ingredient_to_process<span class="Delimiter">));</span>
<span id="L70" class="LineNr"> 70 </span> <span class="Conceal">¦</span> assert<span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>products<span class="Delimiter">)</span> == <span class="Constant">1</span><span class="Delimiter">);</span> products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">2</span><span class="Delimiter">);</span> <span class="Comment">// push a new vector</span>
<span id="L71" class="LineNr"> 71 </span> <span class="Conceal">¦</span> products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
<span id="L72" class="LineNr"> 72 </span> <span class="Conceal">¦</span> ++current_call<span class="Delimiter">().</span>next_ingredient_to_process<span class="Delimiter">;</span>
<span id="L73" class="LineNr"> 73 </span> <span class="Delimiter">}</span>
<span id="L74" class="LineNr"> 74 </span> <span class="Normal">else</span> <span class="Delimiter">{</span>
<span id="L75" class="LineNr"> 75 </span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span><a href='026call.cc.html#L87'>current_instruction</a><span class="Delimiter">().</span>products<span class="Delimiter">)</span> &lt; <span class="Constant">2</span><span class="Delimiter">)</span>
<span id="L76" class="LineNr"> 76 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span><a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;no ingredient to save in '&quot;</span> &lt;&lt; current_instruction<span class="Delimiter">().</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L77" class="LineNr"> 77 </span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='026call.cc.html#L87'>current_instruction</a><span class="Delimiter">().</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L78" class="LineNr"> 78 </span> <span class="Conceal">¦</span> products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">2</span><span class="Delimiter">);</span>
<span id="L79" class="LineNr"> 79 </span> <span class="Conceal">¦</span> <span class="Comment">// pad the first product with sufficient zeros to match its type</span>
<span id="L80" class="LineNr"> 80 </span> <span class="Conceal">¦</span> products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>resize<span class="Delimiter">(</span>size_of<span class="Delimiter">(</span><a href='026call.cc.html#L87'>current_instruction</a><span class="Delimiter">().</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)));</span>
<span id="L81" class="LineNr"> 81 </span> <span class="Conceal">¦</span> products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
<span id="L82" class="LineNr"> 82 </span> <span class="Delimiter">}</span>
<span id="L83" class="LineNr"> 83 </span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L84" class="LineNr"> 84 </span><span class="Delimiter">}</span>
<span id="L85" class="LineNr"> 85 </span>
<span id="L86" class="LineNr"> 86 </span><span class="Delimiter">:(scenario next_ingredient_fail_on_missing)</span>
<span id="L87" class="LineNr"> 87 </span><span class="Special">% Hide_errors = true;</span>
<span id="L88" class="LineNr"> 88 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
<span id="L89" class="LineNr"> 89 </span> f
<span id="L90" class="LineNr"> 90 </span>]
<span id="L91" class="LineNr"> 91 </span><span class="muRecipe">def</span> f [
<span id="L92" class="LineNr"> 92 </span> <span class="Constant">11</span>:num<span class="Special"> &lt;- </span>next-ingredient
<span id="L93" class="LineNr"> 93 </span>]
<span id="L94" class="LineNr"> 94 </span><span class="traceContains">+error: f: no ingredient to save in '11:num'</span>
<span id="L95" class="LineNr"> 95 </span>
<span id="L96" class="LineNr"> 96 </span><span class="Delimiter">:(scenario rewind_ingredients)</span>
<span id="L97" class="LineNr"> 97 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
<span id="L98" class="LineNr"> 98 </span> f <span class="Constant">2</span>
<span id="L99" class="LineNr"> 99 </span>]
<span id="L100" class="LineNr">100 </span><span class="muRecipe">def</span> f [
<span id="L101" class="LineNr">101 </span> <span class="Constant">12</span>:num<span class="Special"> &lt;- </span>next-ingredient <span class="Comment"># consume ingredient</span>
<span id="L102" class="LineNr">102 </span> _<span class="Delimiter">,</span> <span class="Constant">1</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>next-ingredient <span class="Comment"># will not find any ingredients</span>
<span id="L103" class="LineNr">103 </span> rewind-ingredients
<span id="L104" class="LineNr">104 </span> <span class="Constant">13</span>:num<span class="Delimiter">,</span> <span class="Constant">2</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>next-ingredient <span class="Comment"># will find ingredient again</span>
<span id="L105" class="LineNr">105 </span>]
<span id="L106" class="LineNr">106 </span><span class="traceContains">+mem: storing 2 in location 12</span>
<span id="L107" class="LineNr">107 </span><span class="traceContains">+mem: storing 0 in location 1</span>
<span id="L108" class="LineNr">108 </span><span class="traceContains">+mem: storing 2 in location 13</span>
<span id="L109" class="LineNr">109 </span><span class="traceContains">+mem: storing 1 in location 2</span>
<span id="L110" class="LineNr">110 </span>
<span id="L111" class="LineNr">111 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
<span id="L112" class="LineNr">112 </span>REWIND_INGREDIENTS<span class="Delimiter">,</span>
<span id="L113" class="LineNr">113 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
<span id="L114" class="LineNr">114 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;rewind-ingredients&quot;</span><span class="Delimiter">,</span> REWIND_INGREDIENTS<span class="Delimiter">);</span>
<span id="L115" class="LineNr">115 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
<span id="L116" class="LineNr">116 </span><span class="Normal">case</span> REWIND_INGREDIENTS: <span class="Delimiter">{</span>
<span id="L117" class="LineNr">117 </span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L118" class="LineNr">118 </span><span class="Delimiter">}</span>
<span id="L119" class="LineNr">119 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
<span id="L120" class="LineNr">120 </span><span class="Normal">case</span> REWIND_INGREDIENTS: <span class="Delimiter">{</span>
<span id="L121" class="LineNr">121 </span> <a href='026call.cc.html#L81'>current_call</a><span class="Delimiter">().</span>next_ingredient_to_process = <span class="Constant">0</span><span class="Delimiter">;</span>
<span id="L122" class="LineNr">122 </span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L123" class="LineNr">123 </span><span class="Delimiter">}</span>
<span id="L124" class="LineNr">124 </span>
<span id="L125" class="LineNr">125 </span><span class="Delimiter">:(scenario ingredient)</span>
<span id="L126" class="LineNr">126 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
<span id="L127" class="LineNr">127 </span> f <span class="Constant">1</span><span class="Delimiter">,</span> <span class="Constant">2</span>
<span id="L128" class="LineNr">128 </span>]
<span id="L129" class="LineNr">129 </span><span class="muRecipe">def</span> f [
<span id="L130" class="LineNr">130 </span> <span class="Constant">12</span>:num<span class="Special"> &lt;- </span>ingredient <span class="Constant">1</span> <span class="Comment"># consume second ingredient first</span>
<span id="L131" class="LineNr">131 </span> <span class="Constant">13</span>:num<span class="Delimiter">,</span> <span class="Constant">1</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>next-ingredient <span class="Comment"># next-ingredient tries to scan past that</span>
<span id="L132" class="LineNr">132 </span>]
<span id="L133" class="LineNr">133 </span><span class="traceContains">+mem: storing 2 in location 12</span>
<span id="L134" class="LineNr">134 </span><span class="traceContains">+mem: storing 0 in location 1</span>
<span id="L135" class="LineNr">135 </span>
<span id="L136" class="LineNr">136 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
<span id="L137" class="LineNr">137 </span>INGREDIENT<span class="Delimiter">,</span>
<span id="L138" class="LineNr">138 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
<span id="L139" class="LineNr">139 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;ingredient&quot;</span><span class="Delimiter">,</span> INGREDIENT<span class="Delimiter">);</span>
<span id="L140" class="LineNr">140 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
<span id="L141" class="LineNr">141 </span><span class="Normal">case</span> INGREDIENT: <span class="Delimiter">{</span>
<span id="L142" class="LineNr">142 </span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L143" class="LineNr">143 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'ingredient' expects exactly one ingredient, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L144" class="LineNr">144 </span> <span class="Conceal">¦</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L145" class="LineNr">145 </span> <span class="Delimiter">}</span>
<span id="L146" class="LineNr">146 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>!is_literal<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &amp;&amp; !is_mu_number<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)))</span> <span class="Delimiter">{</span>
<span id="L147" class="LineNr">147 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'ingredient' expects a literal ingredient, but got '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L148" class="LineNr">148 </span> <span class="Conceal">¦</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L149" class="LineNr">149 </span> <span class="Delimiter">}</span>
<span id="L150" class="LineNr">150 </span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L151" class="LineNr">151 </span><span class="Delimiter">}</span>
<span id="L152" class="LineNr">152 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
<span id="L153" class="LineNr">153 </span><span class="Normal">case</span> INGREDIENT: <span class="Delimiter">{</span>
<span id="L154" class="LineNr">154 </span> <span class="Normal">if</span> <span class="Delimiter">(</span><span class="Normal">static_cast</span>&lt;<span class="Normal">int</span>&gt;<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span><a href='026call.cc.html#L81'>current_call</a><span class="Delimiter">().</span>ingredient_atoms<span class="Delimiter">))</span> <span class="Delimiter">{</span>
<span id="L155" class="LineNr">155 </span> <span class="Conceal">¦</span> <a href='026call.cc.html#L81'>current_call</a><span class="Delimiter">().</span>next_ingredient_to_process = ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
<span id="L156" class="LineNr">156 </span> <span class="Conceal">¦</span> products<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>
<span id="L157" class="LineNr">157 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='026call.cc.html#L81'>current_call</a><span class="Delimiter">().</span>ingredient_atoms<span class="Delimiter">.</span>at<span class="Delimiter">(</span><a href='026call.cc.html#L81'>current_call</a><span class="Delimiter">().</span>next_ingredient_to_process<span class="Delimiter">));</span>
<span id="L158" class="LineNr">158 </span> <span class="Conceal">¦</span> assert<span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>products<span class="Delimiter">)</span> == <span class="Constant">1</span><span class="Delimiter">);</span> products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">2</span><span class="Delimiter">);</span> <span class="Comment">// push a new vector</span>
<span id="L159" class="LineNr">159 </span> <span class="Conceal">¦</span> products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
<span id="L160" class="LineNr">160 </span> <span class="Conceal">¦</span> ++current_call<span class="Delimiter">().</span>next_ingredient_to_process<span class="Delimiter">;</span>
<span id="L161" class="LineNr">161 </span> <span class="Delimiter">}</span>
<span id="L162" class="LineNr">162 </span> <span class="Normal">else</span> <span class="Delimiter">{</span>
<span id="L163" class="LineNr">163 </span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span><a href='026call.cc.html#L87'>current_instruction</a><span class="Delimiter">().</span>products<span class="Delimiter">)</span> &gt; <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L164" class="LineNr">164 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">2</span><span class="Delimiter">);</span>
<span id="L165" class="LineNr">165 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span> <span class="Comment">// todo: will fail noisily if we try to read a compound value</span>
<span id="L166" class="LineNr">166 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
<span id="L167" class="LineNr">167 </span> <span class="Conceal">¦</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="Identifier">break</span><span class="Delimiter">;</span>
<span id="L170" class="LineNr">170 </span><span class="Delimiter">}</span>
<span id="L171" class="LineNr">171 </span>
<span id="L172" class="LineNr">172 </span><span class="Comment">//: a particularly common array type is the text, or address:array:character</span>
<span id="L173" class="LineNr">173 </span><span class="Delimiter">:(code)</span>
<span id="L174" class="LineNr">174 </span><span class="Normal">bool</span> <a href='027call_ingredient.cc.html#L174'>is_mu_text</a><span class="Delimiter">(</span>reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> x<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L175" class="LineNr">175 </span> <span class="Comment">// End Preprocess is_mu_text(reagent x)</span>
<span id="L176" class="LineNr">176 </span> <span class="Identifier">return</span> x<span class="Delimiter">.</span>type
<span id="L177" class="LineNr">177 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> &amp;&amp; !x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>atom
<span id="L178" class="LineNr">178 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> &amp;&amp; x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>atom
<span id="L179" class="LineNr">179 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> &amp;&amp; x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>value == get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;address&quot;</span><span class="Delimiter">)</span>
<span id="L180" class="LineNr">180 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> &amp;&amp; x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>right
<span id="L181" class="LineNr">181 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> &amp;&amp; !x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>atom
<span id="L182" class="LineNr">182 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> &amp;&amp; x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>atom
<span id="L183" class="LineNr">183 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> &amp;&amp; x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>value == get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;array&quot;</span><span class="Delimiter">)</span>
<span id="L184" class="LineNr">184 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> &amp;&amp; x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>right
<span id="L185" class="LineNr">185 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> &amp;&amp; !x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>atom
<span id="L186" class="LineNr">186 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> &amp;&amp; x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>value == get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;character&quot;</span><span class="Delimiter">)</span>
<span id="L187" class="LineNr">187 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> &amp;&amp; x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>right == <span class="Constant">NULL</span><span class="Delimiter">;</span>
<span id="L188" class="LineNr">188 </span><span class="Delimiter">}</span>
<span id="L43" class="LineNr"> 43 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;next-input&quot;</span><span class="Delimiter">,</span> NEXT_INGREDIENT<span class="Delimiter">);</span>
<span id="L44" class="LineNr"> 44 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
<span id="L45" class="LineNr"> 45 </span><span class="Normal">case</span> NEXT_INGREDIENT: <span class="Delimiter">{</span>
<span id="L46" class="LineNr"> 46 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>!inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
<span id="L47" class="LineNr"> 47 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'next-ingredient' didn't expect any ingredients in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
<span id="L48" class="LineNr"> 48 </span> <span class="Conceal">¦</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L49" class="LineNr"> 49 </span> <span class="Delimiter">}</span>
<span id="L50" class="LineNr"> 50 </span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L51" class="LineNr"> 51 </span><span class="Delimiter">}</span>
<span id="L52" class="LineNr"> 52 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
<span id="L53" class="LineNr"> 53 </span><span class="Normal">case</span> NEXT_INGREDIENT: <span class="Delimiter">{</span>
<span id="L54" class="LineNr"> 54 </span> assert<span class="Delimiter">(</span>!Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span>empty<span class="Delimiter">());</span>
<span id="L55" class="LineNr"> 55 </span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='026call.cc.html#L81'>current_call</a><span class="Delimiter">().</span>next_ingredient_to_process &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span><a href='026call.cc.html#L81'>current_call</a><span class="Delimiter">().</span>ingredient_atoms<span class="Delimiter">))</span> <span class="Delimiter">{</span>
<span id="L56" class="LineNr"> 56 </span> <span class="Conceal">¦</span> reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> product = <a href='026call.cc.html#L87'>current_instruction</a><span class="Delimiter">().</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
<span id="L57" class="LineNr"> 57 </span> <span class="Conceal">¦</span> <span class="Comment">// End Preprocess NEXT_INGREDIENT product</span>
<span id="L58" class="LineNr"> 58 </span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">()</span> == <span class="Constant">&quot;main&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L59" class="LineNr"> 59 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Comment">// no ingredient types since the call might be implicit; assume ingredients are always strings</span>
<span id="L60" class="LineNr"> 60 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Comment">// todo: how to test this?</span>
<span id="L61" class="LineNr"> 61 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_text<span class="Delimiter">(</span>product<span class="Delimiter">))</span>
<span id="L62" class="LineNr"> 62 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;main: wrong type for ingredient '&quot;</span> &lt;&lt; product<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L63" class="LineNr"> 63 </span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>
<span id="L64" class="LineNr"> 64 </span> <span class="Conceal">¦</span> <span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!types_coercible<span class="Delimiter">(</span>product<span class="Delimiter">,</span>
<span id="L65" class="LineNr"> 65 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='026call.cc.html#L81'>current_call</a><span class="Delimiter">().</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><a href='026call.cc.html#L81'>current_call</a><span class="Delimiter">().</span>next_ingredient_to_process<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
<span id="L66" class="LineNr"> 66 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span><a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;wrong type for ingredient '&quot;</span> &lt;&lt; product<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L67" class="LineNr"> 67 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Comment">// End next-ingredient Type Mismatch Error</span>
<span id="L68" class="LineNr"> 68 </span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>
<span id="L69" class="LineNr"> 69 </span> <span class="Conceal">¦</span> products<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>
<span id="L70" class="LineNr"> 70 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='026call.cc.html#L81'>current_call</a><span class="Delimiter">().</span>ingredient_atoms<span class="Delimiter">.</span>at<span class="Delimiter">(</span><a href='026call.cc.html#L81'>current_call</a><span class="Delimiter">().</span>next_ingredient_to_process<span class="Delimiter">));</span>
<span id="L71" class="LineNr"> 71 </span> <span class="Conceal">¦</span> assert<span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>products<span class="Delimiter">)</span> == <span class="Constant">1</span><span class="Delimiter">);</span> products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">2</span><span class="Delimiter">);</span> <span class="Comment">// push a new vector</span>
<span id="L72" class="LineNr"> 72 </span> <span class="Conceal">¦</span> products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
<span id="L73" class="LineNr"> 73 </span> <span class="Conceal">¦</span> ++current_call<span class="Delimiter">().</span>next_ingredient_to_process<span class="Delimiter">;</span>
<span id="L74" class="LineNr"> 74 </span> <span class="Delimiter">}</span>
<span id="L75" class="LineNr"> 75 </span> <span class="Normal">else</span> <span class="Delimiter">{</span>
<span id="L76" class="LineNr"> 76 </span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span><a href='026call.cc.html#L87'>current_instruction</a><span class="Delimiter">().</span>products<span class="Delimiter">)</span> &lt; <span class="Constant">2</span><span class="Delimiter">)</span>
<span id="L77" class="LineNr"> 77 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span><a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;no ingredient to save in '&quot;</span> &lt;&lt; current_instruction<span class="Delimiter">().</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L78" class="LineNr"> 78 </span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='026call.cc.html#L87'>current_instruction</a><span class="Delimiter">().</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L79" class="LineNr"> 79 </span> <span class="Conceal">¦</span> products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">2</span><span class="Delimiter">);</span>
<span id="L80" class="LineNr"> 80 </span> <span class="Conceal">¦</span> <span class="Comment">// pad the first product with sufficient zeros to match its type</span>
<span id="L81" class="LineNr"> 81 </span> <span class="Conceal">¦</span> products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>resize<span class="Delimiter">(</span>size_of<span class="Delimiter">(</span><a href='026call.cc.html#L87'>current_instruction</a><span class="Delimiter">().</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)));</span>
<span id="L82" class="LineNr"> 82 </span> <span class="Conceal">¦</span> products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
<span id="L83" class="LineNr"> 83 </span> <span class="Delimiter">}</span>
<span id="L84" class="LineNr"> 84 </span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L85" class="LineNr"> 85 </span><span class="Delimiter">}</span>
<span id="L86" class="LineNr"> 86 </span>
<span id="L87" class="LineNr"> 87 </span><span class="Delimiter">:(scenario next_ingredient_fail_on_missing)</span>
<span id="L88" class="LineNr"> 88 </span><span class="Special">% Hide_errors = true;</span>
<span id="L89" class="LineNr"> 89 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
<span id="L90" class="LineNr"> 90 </span> f
<span id="L91" class="LineNr"> 91 </span>]
<span id="L92" class="LineNr"> 92 </span><span class="muRecipe">def</span> f [
<span id="L93" class="LineNr"> 93 </span> <span class="Constant">11</span>:num<span class="Special"> &lt;- </span>next-ingredient
<span id="L94" class="LineNr"> 94 </span>]
<span id="L95" class="LineNr"> 95 </span><span class="traceContains">+error: f: no ingredient to save in '11:num'</span>
<span id="L96" class="LineNr"> 96 </span>
<span id="L97" class="LineNr"> 97 </span><span class="Delimiter">:(scenario rewind_ingredients)</span>
<span id="L98" class="LineNr"> 98 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
<span id="L99" class="LineNr"> 99 </span> f <span class="Constant">2</span>
<span id="L100" class="LineNr">100 </span>]
<span id="L101" class="LineNr">101 </span><span class="muRecipe">def</span> f [
<span id="L102" class="LineNr">102 </span> <span class="Constant">12</span>:num<span class="Special"> &lt;- </span>next-ingredient <span class="Comment"># consume ingredient</span>
<span id="L103" class="LineNr">103 </span> _<span class="Delimiter">,</span> <span class="Constant">1</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>next-ingredient <span class="Comment"># will not find any ingredients</span>
<span id="L104" class="LineNr">104 </span> rewind-ingredients
<span id="L105" class="LineNr">105 </span> <span class="Constant">13</span>:num<span class="Delimiter">,</span> <span class="Constant">2</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>next-ingredient <span class="Comment"># will find ingredient again</span>
<span id="L106" class="LineNr">106 </span>]
<span id="L107" class="LineNr">107 </span><span class="traceContains">+mem: storing 2 in location 12</span>
<span id="L108" class="LineNr">108 </span><span class="traceContains">+mem: storing 0 in location 1</span>
<span id="L109" class="LineNr">109 </span><span class="traceContains">+mem: storing 2 in location 13</span>
<span id="L110" class="LineNr">110 </span><span class="traceContains">+mem: storing 1 in location 2</span>
<span id="L111" class="LineNr">111 </span>
<span id="L112" class="LineNr">112 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
<span id="L113" class="LineNr">113 </span>REWIND_INGREDIENTS<span class="Delimiter">,</span>
<span id="L114" class="LineNr">114 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
<span id="L115" class="LineNr">115 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;rewind-ingredients&quot;</span><span class="Delimiter">,</span> REWIND_INGREDIENTS<span class="Delimiter">);</span>
<span id="L116" class="LineNr">116 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;rewind-inputs&quot;</span><span class="Delimiter">,</span> REWIND_INGREDIENTS<span class="Delimiter">);</span>
<span id="L117" class="LineNr">117 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
<span id="L118" class="LineNr">118 </span><span class="Normal">case</span> REWIND_INGREDIENTS: <span class="Delimiter">{</span>
<span id="L119" class="LineNr">119 </span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L120" class="LineNr">120 </span><span class="Delimiter">}</span>
<span id="L121" class="LineNr">121 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
<span id="L122" class="LineNr">122 </span><span class="Normal">case</span> REWIND_INGREDIENTS: <span class="Delimiter">{</span>
<span id="L123" class="LineNr">123 </span> <a href='026call.cc.html#L81'>current_call</a><span class="Delimiter">().</span>next_ingredient_to_process = <span class="Constant">0</span><span class="Delimiter">;</span>
<span id="L124" class="LineNr">124 </span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L125" class="LineNr">125 </span><span class="Delimiter">}</span>
<span id="L126" class="LineNr">126 </span>
<span id="L127" class="LineNr">127 </span><span class="Delimiter">:(scenario ingredient)</span>
<span id="L128" class="LineNr">128 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
<span id="L129" class="LineNr">129 </span> f <span class="Constant">1</span><span class="Delimiter">,</span> <span class="Constant">2</span>
<span id="L130" class="LineNr">130 </span>]
<span id="L131" class="LineNr">131 </span><span class="muRecipe">def</span> f [
<span id="L132" class="LineNr">132 </span> <span class="Constant">12</span>:num<span class="Special"> &lt;- </span>ingredient <span class="Constant">1</span> <span class="Comment"># consume second ingredient first</span>
<span id="L133" class="LineNr">133 </span> <span class="Constant">13</span>:num<span class="Delimiter">,</span> <span class="Constant">1</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>next-ingredient <span class="Comment"># next-ingredient tries to scan past that</span>
<span id="L134" class="LineNr">134 </span>]
<span id="L135" class="LineNr">135 </span><span class="traceContains">+mem: storing 2 in location 12</span>
<span id="L136" class="LineNr">136 </span><span class="traceContains">+mem: storing 0 in location 1</span>
<span id="L137" class="LineNr">137 </span>
<span id="L138" class="LineNr">138 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
<span id="L139" class="LineNr">139 </span>INGREDIENT<span class="Delimiter">,</span>
<span id="L140" class="LineNr">140 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
<span id="L141" class="LineNr">141 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;ingredient&quot;</span><span class="Delimiter">,</span> INGREDIENT<span class="Delimiter">);</span>
<span id="L142" class="LineNr">142 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;input&quot;</span><span class="Delimiter">,</span> INGREDIENT<span class="Delimiter">);</span>
<span id="L143" class="LineNr">143 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
<span id="L144" class="LineNr">144 </span><span class="Normal">case</span> INGREDIENT: <span class="Delimiter">{</span>
<span id="L145" class="LineNr">145 </span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L146" class="LineNr">146 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'ingredient' expects exactly one ingredient, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L147" class="LineNr">147 </span> <span class="Conceal">¦</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L148" class="LineNr">148 </span> <span class="Delimiter">}</span>
<span id="L149" class="LineNr">149 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>!is_literal<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &amp;&amp; !is_mu_number<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)))</span> <span class="Delimiter">{</span>
<span id="L150" class="LineNr">150 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'ingredient' expects a literal ingredient, but got '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L151" class="LineNr">151 </span> <span class="Conceal">¦</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L152" class="LineNr">152 </span> <span class="Delimiter">}</span>
<span id="L153" class="LineNr">153 </span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L154" class="LineNr">154 </span><span class="Delimiter">}</span>
<span id="L155" class="LineNr">155 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
<span id="L156" class="LineNr">156 </span><span class="Normal">case</span> INGREDIENT: <span class="Delimiter">{</span>
<span id="L157" class="LineNr">157 </span> <span class="Normal">if</span> <span class="Delimiter">(</span><span class="Normal">static_cast</span>&lt;<span class="Normal">int</span>&gt;<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span><a href='026call.cc.html#L81'>current_call</a><span class="Delimiter">().</span>ingredient_atoms<span class="Delimiter">))</span> <span class="Delimiter">{</span>
<span id="L158" class="LineNr">158 </span> <span class="Conceal">¦</span> <a href='026call.cc.html#L81'>current_call</a><span class="Delimiter">().</span>next_ingredient_to_process = ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
<span id="L159" class="LineNr">159 </span> <span class="Conceal">¦</span> products<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>
<span id="L160" class="LineNr">160 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='026call.cc.html#L81'>current_call</a><span class="Delimiter">().</span>ingredient_atoms<span class="Delimiter">.</span>at<span class="Delimiter">(</span><a href='026call.cc.html#L81'>current_call</a><span class="Delimiter">().</span>next_ingredient_to_process<span class="Delimiter">));</span>
<span id="L161" class="LineNr">161 </span> <span class="Conceal">¦</span> assert<span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>products<span class="Delimiter">)</span> == <span class="Constant">1</span><span class="Delimiter">);</span> products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">2</span><span class="Delimiter">);</span> <span class="Comment">// push a new vector</span>
<span id="L162" class="LineNr">162 </span> <span class="Conceal">¦</span> products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
<span id="L163" class="LineNr">163 </span> <span class="Conceal">¦</span> ++current_call<span class="Delimiter">().</span>next_ingredient_to_process<span class="Delimiter">;</span>
<span id="L164" class="LineNr">164 </span> <span class="Delimiter">}</span>
<span id="L165" class="LineNr">165 </span> <span class="Normal">else</span> <span class="Delimiter">{</span>
<span id="L166" class="LineNr">166 </span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span><a href='026call.cc.html#L87'>current_instruction</a><span class="Delimiter">().</span>products<span class="Delimiter">)</span> &gt; <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L167" class="LineNr">167 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">2</span><span class="Delimiter">);</span>
<span id="L168" class="LineNr">168 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span> <span class="Comment">// todo: will fail noisily if we try to read a compound value</span>
<span id="L169" class="LineNr">169 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
<span id="L170" class="LineNr">170 </span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>
<span id="L171" class="LineNr">171 </span> <span class="Delimiter">}</span>
<span id="L172" class="LineNr">172 </span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L173" class="LineNr">173 </span><span class="Delimiter">}</span>
<span id="L174" class="LineNr">174 </span>
<span id="L175" class="LineNr">175 </span><span class="Comment">//: a particularly common array type is the text, or address:array:character</span>
<span id="L176" class="LineNr">176 </span><span class="Delimiter">:(code)</span>
<span id="L177" class="LineNr">177 </span><span class="Normal">bool</span> <a href='027call_ingredient.cc.html#L177'>is_mu_text</a><span class="Delimiter">(</span>reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> x<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L178" class="LineNr">178 </span> <span class="Comment">// End Preprocess is_mu_text(reagent x)</span>
<span id="L179" class="LineNr">179 </span> <span class="Identifier">return</span> x<span class="Delimiter">.</span>type
<span id="L180" class="LineNr">180 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> &amp;&amp; !x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>atom
<span id="L181" class="LineNr">181 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> &amp;&amp; x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>atom
<span id="L182" class="LineNr">182 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> &amp;&amp; x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>value == get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;address&quot;</span><span class="Delimiter">)</span>
<span id="L183" class="LineNr">183 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> &amp;&amp; x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>right
<span id="L184" class="LineNr">184 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> &amp;&amp; !x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>atom
<span id="L185" class="LineNr">185 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> &amp;&amp; x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>atom
<span id="L186" class="LineNr">186 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> &amp;&amp; x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>value == get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;array&quot;</span><span class="Delimiter">)</span>
<span id="L187" class="LineNr">187 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> &amp;&amp; x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>right
<span id="L188" class="LineNr">188 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> &amp;&amp; !x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>atom
<span id="L189" class="LineNr">189 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> &amp;&amp; x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>value == get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;character&quot;</span><span class="Delimiter">)</span>
<span id="L190" class="LineNr">190 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> &amp;&amp; x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>right == <span class="Constant">NULL</span><span class="Delimiter">;</span>
<span id="L191" class="LineNr">191 </span><span class="Delimiter">}</span>
</pre>
</body>
</html>

View File

@ -92,151 +92,152 @@ if ('onhashchange' in window) {
<span id="L29" class="LineNr"> 29 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
<span id="L30" class="LineNr"> 30 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;return&quot;</span><span class="Delimiter">,</span> RETURN<span class="Delimiter">);</span>
<span id="L31" class="LineNr"> 31 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;reply&quot;</span><span class="Delimiter">,</span> RETURN<span class="Delimiter">);</span> <span class="Comment">// synonym while teaching</span>
<span id="L32" class="LineNr"> 32 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
<span id="L33" class="LineNr"> 33 </span><span class="Normal">case</span> RETURN: <span class="Delimiter">{</span>
<span id="L34" class="LineNr"> 34 </span> <span class="Identifier">break</span><span class="Delimiter">;</span> <span class="Comment">// checks will be performed by a transform below</span>
<span id="L35" class="LineNr"> 35 </span><span class="Delimiter">}</span>
<span id="L36" class="LineNr"> 36 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
<span id="L37" class="LineNr"> 37 </span><span class="Normal">case</span> RETURN: <span class="Delimiter">{</span>
<span id="L38" class="LineNr"> 38 </span> <span class="Comment">// Begin Return</span>
<span id="L39" class="LineNr"> 39 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>Trace_stream<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L40" class="LineNr"> 40 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;trace&quot;</span><span class="Delimiter">)</span> &lt;&lt; <a href='026call.cc.html#L87'>current_instruction</a><span class="Delimiter">().</span>name &lt;&lt; <span class="Constant">&quot;: decrementing callstack depth from &quot;</span> &lt;&lt; Trace_stream<span class="Delimiter">-&gt;</span>callstack_depth &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L41" class="LineNr"> 41 </span> <span class="Conceal">¦</span> --Trace_stream<span class="Delimiter">-&gt;</span>callstack_depth<span class="Delimiter">;</span>
<span id="L42" class="LineNr"> 42 </span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>Trace_stream<span class="Delimiter">-&gt;</span>callstack_depth &lt; <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L43" class="LineNr"> 43 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
<span id="L44" class="LineNr"> 44 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Identifier">goto</span> stop_running_current_routine<span class="Delimiter">;</span>
<span id="L45" class="LineNr"> 45 </span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>
<span id="L46" class="LineNr"> 46 </span> <span class="Delimiter">}</span>
<span id="L47" class="LineNr"> 47 </span> Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span>pop_front<span class="Delimiter">();</span>
<span id="L48" class="LineNr"> 48 </span> <span class="Comment">// just in case 'main' returns a value, drop it for now</span>
<span id="L49" class="LineNr"> 49 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Identifier">goto</span> stop_running_current_routine<span class="Delimiter">;</span>
<span id="L50" class="LineNr"> 50 </span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span> i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>ingredients<span class="Delimiter">);</span> ++i<span class="Delimiter">)</span>
<span id="L51" class="LineNr"> 51 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9998</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;result &quot;</span> &lt;&lt; i &lt;&lt; <span class="Constant">&quot; is &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">))</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L52" class="LineNr"> 52 </span> <span class="Comment">// make return products available to caller</span>
<span id="L53" class="LineNr"> 53 </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#L197'>end</a><span class="Delimiter">(),</span> inserter<span class="Delimiter">(</span>products<span class="Delimiter">,</span> products<span class="Delimiter">.</span>begin<span class="Delimiter">()));</span>
<span id="L54" class="LineNr"> 54 </span> <span class="Comment">// End Return</span>
<span id="L55" class="LineNr"> 55 </span> <span class="Identifier">break</span><span class="Delimiter">;</span> <span class="Comment">// continue to process rest of *caller* instruction</span>
<span id="L56" class="LineNr"> 56 </span><span class="Delimiter">}</span>
<span id="L57" class="LineNr"> 57 </span>
<span id="L58" class="LineNr"> 58 </span><span class="Comment">//: Types in return instructions are checked ahead of time.</span>
<span id="L59" class="LineNr"> 59 </span>
<span id="L60" class="LineNr"> 60 </span><span class="Delimiter">:(before &quot;End Checks&quot;)</span>
<span id="L61" class="LineNr"> 61 </span>Transform<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span><a href='028call_return.cc.html#L63'>check_types_of_return_instructions</a><span class="Delimiter">);</span> <span class="Comment">// idempotent</span>
<span id="L62" class="LineNr"> 62 </span><span class="Delimiter">:(code)</span>
<span id="L63" class="LineNr"> 63 </span><span class="Normal">void</span> <a href='028call_return.cc.html#L63'>check_types_of_return_instructions</a><span class="Delimiter">(</span><span class="Normal">const</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L64" class="LineNr"> 64 </span> <span class="Normal">const</span> recipe&amp; caller = get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">);</span>
<span id="L65" class="LineNr"> 65 </span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;--- check types of return instructions in <a href='010vm.cc.html#L19'>recipe</a> &quot;</span> &lt;&lt; caller<span class="Delimiter">.</span>name &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L66" class="LineNr"> 66 </span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span> i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>steps<span class="Delimiter">);</span> ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L67" class="LineNr"> 67 </span> <span class="Conceal">¦</span> <span class="Normal">const</span> instruction&amp; caller_instruction = caller<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
<span id="L68" class="LineNr"> 68 </span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>caller_instruction<span class="Delimiter">.</span>is_label<span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
<span id="L69" class="LineNr"> 69 </span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>caller_instruction<span class="Delimiter">.</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
<span id="L70" class="LineNr"> 70 </span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='028call_return.cc.html#L114'>is_primitive</a><span class="Delimiter">(</span>caller_instruction<span class="Delimiter">.</span>operation<span class="Delimiter">))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
<span id="L71" class="LineNr"> 71 </span> <span class="Conceal">¦</span> <span class="Normal">const</span> recipe&amp; callee = get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> caller_instruction<span class="Delimiter">.</span>operation<span class="Delimiter">);</span>
<span id="L72" class="LineNr"> 72 </span> <span class="Conceal">¦</span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span> i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>callee<span class="Delimiter">.</span>steps<span class="Delimiter">);</span> ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L73" class="LineNr"> 73 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">const</span> instruction&amp; return_inst = callee<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
<span id="L74" class="LineNr"> 74 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>return_inst<span class="Delimiter">.</span>operation != RETURN<span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
<span id="L75" class="LineNr"> 75 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Comment">// check types with the caller</span>
<span id="L76" class="LineNr"> 76 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller_instruction<span class="Delimiter">.</span>products<span class="Delimiter">)</span> &gt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>return_inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">))</span> <span class="Delimiter">{</span>
<span id="L77" class="LineNr"> 77 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;too few values returned from &quot;</span> &lt;&lt; callee<span class="Delimiter">.</span>name &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L78" class="LineNr"> 78 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L79" class="LineNr"> 79 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>
<span id="L80" class="LineNr"> 80 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span> i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller_instruction<span class="Delimiter">.</span>products<span class="Delimiter">);</span> ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L81" class="LineNr"> 81 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> lhs = return_inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
<span id="L82" class="LineNr"> 82 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> rhs = caller_instruction<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
<span id="L83" class="LineNr"> 83 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Comment">// End Check RETURN Copy(lhs, rhs)</span>
<span id="L84" class="LineNr"> 84 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!types_coercible<span class="Delimiter">(</span>rhs<span class="Delimiter">,</span> lhs<span class="Delimiter">))</span> <span class="Delimiter">{</span>
<span id="L85" class="LineNr"> 85 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>callee<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; return_inst<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot; ingredient '&quot;</span> &lt;&lt; lhs<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;' can't be saved in '&quot;</span> &lt;&lt; rhs<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
<span id="L86" class="LineNr"> 86 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot; ['&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>lhs<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;' vs '&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>rhs<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;']</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L87" class="LineNr"> 87 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Identifier">goto</span> finish_return_check<span class="Delimiter">;</span>
<span id="L88" class="LineNr"> 88 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>
<span id="L89" class="LineNr"> 89 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>
<span id="L90" class="LineNr"> 90 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Comment">// check that any return ingredients with /same-as-ingredient connect up</span>
<span id="L91" class="LineNr"> 91 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Comment">// the corresponding ingredient and product in the caller.</span>
<span id="L92" class="LineNr"> 92 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span> i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller_instruction<span class="Delimiter">.</span>products<span class="Delimiter">);</span> ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L93" class="LineNr"> 93 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>has_property<span class="Delimiter">(</span>return_inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">),</span> <span class="Constant">&quot;same-as-ingredient&quot;</span><span class="Delimiter">))</span> <span class="Delimiter">{</span>
<span id="L94" class="LineNr"> 94 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> string_tree* tmp = property<span class="Delimiter">(</span>return_inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">),</span> <span class="Constant">&quot;same-as-ingredient&quot;</span><span class="Delimiter">);</span>
<span id="L95" class="LineNr"> 95 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!tmp || !tmp<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L96" class="LineNr"> 96 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'same-as-ingredient' metadata should take exactly one value in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>return_inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L97" class="LineNr"> 97 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Identifier">goto</span> finish_return_check<span class="Delimiter">;</span>
<span id="L98" class="LineNr"> 98 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>
<span id="L99" class="LineNr"> 99 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">int</span> ingredient_index = <a href='002test.cc.html#L91'>to_integer</a><span class="Delimiter">(</span>tmp<span class="Delimiter">-&gt;</span>value<span class="Delimiter">);</span>
<span id="L100" class="LineNr">100 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>ingredient_index &gt;= <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller_instruction<span class="Delimiter">.</span>ingredients<span class="Delimiter">))</span> <span class="Delimiter">{</span>
<span id="L101" class="LineNr">101 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;too few ingredients in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>caller_instruction<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L102" class="LineNr">102 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Identifier">goto</span> finish_return_check<span class="Delimiter">;</span>
<span id="L103" class="LineNr">103 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>
<span id="L104" class="LineNr">104 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!is_dummy<span class="Delimiter">(</span>caller_instruction<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">))</span> &amp;&amp; !is_literal<span class="Delimiter">(</span>caller_instruction<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>ingredient_index<span class="Delimiter">))</span> &amp;&amp; caller_instruction<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>name != caller_instruction<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>ingredient_index<span class="Delimiter">).</span>name<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L105" class="LineNr">105 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>caller_instruction<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;' should write to '&quot;</span> &lt;&lt; caller_instruction<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>ingredient_index<span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;' rather than '&quot;</span> &lt;&lt; caller_instruction<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L106" class="LineNr">106 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>
<span id="L107" class="LineNr">107 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>
<span id="L108" class="LineNr">108 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>
<span id="L109" class="LineNr">109 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">finish_return_check</span>:<span class="Delimiter">;</span>
<span id="L110" class="LineNr">110 </span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>
<span id="L111" class="LineNr">111 </span> <span class="Delimiter">}</span>
<span id="L112" class="LineNr">112 </span><span class="Delimiter">}</span>
<span id="L113" class="LineNr">113 </span>
<span id="L114" class="LineNr">114 </span><span class="Normal">bool</span> <a href='028call_return.cc.html#L114'>is_primitive</a><span class="Delimiter">(</span><a href='010vm.cc.html#L14'>recipe_ordinal</a> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L115" class="LineNr">115 </span> <span class="Identifier">return</span> r &lt; <a href='010vm.cc.html#L191'>MAX_PRIMITIVE_RECIPES</a><span class="Delimiter">;</span>
<span id="L116" class="LineNr">116 </span><span class="Delimiter">}</span>
<span id="L117" class="LineNr">117 </span>
<span id="L118" class="LineNr">118 </span><span class="Delimiter">:(scenario return_type_mismatch)</span>
<span id="L119" class="LineNr">119 </span><span class="Special">% Hide_errors = true;</span>
<span id="L120" class="LineNr">120 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
<span id="L121" class="LineNr">121 </span> <span class="Constant">3</span>:num<span class="Special"> &lt;- </span>f <span class="Constant">2</span>
<span id="L122" class="LineNr">122 </span>]
<span id="L123" class="LineNr">123 </span><span class="muRecipe">def</span> f [
<span id="L124" class="LineNr">124 </span> <span class="Constant">12</span>:num<span class="Special"> &lt;- </span>next-ingredient
<span id="L125" class="LineNr">125 </span> <span class="Constant">13</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">35</span>
<span id="L126" class="LineNr">126 </span> <span class="Constant">14</span>:point<span class="Special"> &lt;- </span>copy <span class="Constant">12</span>:point/<span class="Special">raw</span>
<span id="L127" class="LineNr">127 </span> <span class="Identifier">return</span> <span class="Constant">14</span>:point
<span id="L128" class="LineNr">128 </span>]
<span id="L129" class="LineNr">129 </span><span class="traceContains">+error: f: return ingredient '14:point' can't be saved in '3:num'</span>
<span id="L130" class="LineNr">130 </span>
<span id="L131" class="LineNr">131 </span><span class="Comment">//: In Mu we'd like to assume that any instruction doesn't modify its</span>
<span id="L132" class="LineNr">132 </span><span class="Comment">//: ingredients unless they're also products. The /same-as-ingredient inside</span>
<span id="L133" class="LineNr">133 </span><span class="Comment">//: the recipe's 'return' indicates that an ingredient is intended to be</span>
<span id="L134" class="LineNr">134 </span><span class="Comment">//: modified in place, and will help catch accidental misuse of such</span>
<span id="L135" class="LineNr">135 </span><span class="Comment">//: 'ingredient-products' (sometimes called in-out parameters in other</span>
<span id="L136" class="LineNr">136 </span><span class="Comment">//: languages).</span>
<span id="L137" class="LineNr">137 </span>
<span id="L138" class="LineNr">138 </span><span class="Delimiter">:(scenario return_same_as_ingredient)</span>
<span id="L139" class="LineNr">139 </span><span class="Special">% Hide_errors = true;</span>
<span id="L140" class="LineNr">140 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
<span id="L141" class="LineNr">141 </span> <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
<span id="L142" class="LineNr">142 </span> <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>test1 <span class="Constant">1</span>:num <span class="Comment"># call with different ingredient and product</span>
<span id="L143" class="LineNr">143 </span>]
<span id="L144" class="LineNr">144 </span><span class="muRecipe">def</span> test1 [
<span id="L145" class="LineNr">145 </span> <span class="Constant">10</span>:num<span class="Special"> &lt;- </span>next-ingredient
<span id="L146" class="LineNr">146 </span> <span class="Identifier">return</span> <span class="Constant">10</span>:num/same-as-ingredient:<span class="Constant">0</span>
<span id="L147" class="LineNr">147 </span>]
<span id="L148" class="LineNr">148 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: '2:num &lt;- test1 1:num' should write to '1:num' rather than '2:num'</span>
<span id="L149" class="LineNr">149 </span>
<span id="L150" class="LineNr">150 </span><span class="Delimiter">:(scenario return_same_as_ingredient_dummy)</span>
<span id="L151" class="LineNr">151 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
<span id="L152" class="LineNr">152 </span> <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
<span id="L153" class="LineNr">153 </span> _<span class="Special"> &lt;- </span>test1 <span class="Constant">1</span>:num <span class="Comment"># call with different ingredient and product</span>
<span id="L154" class="LineNr">154 </span>]
<span id="L155" class="LineNr">155 </span><span class="muRecipe">def</span> test1 [
<span id="L156" class="LineNr">156 </span> <span class="Constant">10</span>:num<span class="Special"> &lt;- </span>next-ingredient
<span id="L157" class="LineNr">157 </span> <span class="Identifier">return</span> <span class="Constant">10</span>:num/same-as-ingredient:<span class="Constant">0</span>
<span id="L158" class="LineNr">158 </span>]
<span id="L159" class="LineNr">159 </span>$error: <span class="Constant">0</span>
<span id="L160" class="LineNr">160 </span>
<span id="L161" class="LineNr">161 </span><span class="Delimiter">:(code)</span>
<span id="L162" class="LineNr">162 </span>string <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span><span class="Normal">const</span> vector&lt;<span class="Normal">double</span>&gt;&amp; in<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L163" class="LineNr">163 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>in<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Identifier">return</span> <span class="Constant">&quot;[]&quot;</span><span class="Delimiter">;</span>
<span id="L164" class="LineNr">164 </span> ostringstream out<span class="Delimiter">;</span>
<span id="L165" class="LineNr">165 </span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>in<span class="Delimiter">)</span> == <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L166" class="LineNr">166 </span> <span class="Conceal">¦</span> out &lt;&lt; no_scientific<span class="Delimiter">(</span>in<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">));</span>
<span id="L167" class="LineNr">167 </span> <span class="Conceal">¦</span> <span class="Identifier">return</span> out<span class="Delimiter">.</span>str<span class="Delimiter">();</span>
<span id="L168" class="LineNr">168 </span> <span class="Delimiter">}</span>
<span id="L169" class="LineNr">169 </span> out &lt;&lt; <span class="Constant">&quot;[&quot;</span><span class="Delimiter">;</span>
<span id="L170" class="LineNr">170 </span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span> i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span> ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L171" class="LineNr">171 </span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>i &gt; <span class="Constant">0</span><span class="Delimiter">)</span> out &lt;&lt; <span class="Constant">&quot;, &quot;</span><span class="Delimiter">;</span>
<span id="L172" class="LineNr">172 </span> <span class="Conceal">¦</span> out &lt;&lt; no_scientific<span class="Delimiter">(</span>in<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">));</span>
<span id="L173" class="LineNr">173 </span> <span class="Delimiter">}</span>
<span id="L174" class="LineNr">174 </span> out &lt;&lt; <span class="Constant">&quot;]&quot;</span><span class="Delimiter">;</span>
<span id="L175" class="LineNr">175 </span> <span class="Identifier">return</span> out<span class="Delimiter">.</span>str<span class="Delimiter">();</span>
<span id="L176" class="LineNr">176 </span><span class="Delimiter">}</span>
<span id="L32" class="LineNr"> 32 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;output&quot;</span><span class="Delimiter">,</span> RETURN<span class="Delimiter">);</span> <span class="Comment">// experiment</span>
<span id="L33" class="LineNr"> 33 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
<span id="L34" class="LineNr"> 34 </span><span class="Normal">case</span> RETURN: <span class="Delimiter">{</span>
<span id="L35" class="LineNr"> 35 </span> <span class="Identifier">break</span><span class="Delimiter">;</span> <span class="Comment">// checks will be performed by a transform below</span>
<span id="L36" class="LineNr"> 36 </span><span class="Delimiter">}</span>
<span id="L37" class="LineNr"> 37 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
<span id="L38" class="LineNr"> 38 </span><span class="Normal">case</span> RETURN: <span class="Delimiter">{</span>
<span id="L39" class="LineNr"> 39 </span> <span class="Comment">// Begin Return</span>
<span id="L40" class="LineNr"> 40 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>Trace_stream<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L41" class="LineNr"> 41 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;trace&quot;</span><span class="Delimiter">)</span> &lt;&lt; <a href='026call.cc.html#L87'>current_instruction</a><span class="Delimiter">().</span>name &lt;&lt; <span class="Constant">&quot;: decrementing callstack depth from &quot;</span> &lt;&lt; Trace_stream<span class="Delimiter">-&gt;</span>callstack_depth &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L42" class="LineNr"> 42 </span> <span class="Conceal">¦</span> --Trace_stream<span class="Delimiter">-&gt;</span>callstack_depth<span class="Delimiter">;</span>
<span id="L43" class="LineNr"> 43 </span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>Trace_stream<span class="Delimiter">-&gt;</span>callstack_depth &lt; <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L44" class="LineNr"> 44 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
<span id="L45" class="LineNr"> 45 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Identifier">goto</span> stop_running_current_routine<span class="Delimiter">;</span>
<span id="L46" class="LineNr"> 46 </span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>
<span id="L47" class="LineNr"> 47 </span> <span class="Delimiter">}</span>
<span id="L48" class="LineNr"> 48 </span> Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span>pop_front<span class="Delimiter">();</span>
<span id="L49" class="LineNr"> 49 </span> <span class="Comment">// just in case 'main' returns a value, drop it for now</span>
<span id="L50" class="LineNr"> 50 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Identifier">goto</span> stop_running_current_routine<span class="Delimiter">;</span>
<span id="L51" class="LineNr"> 51 </span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span> i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>ingredients<span class="Delimiter">);</span> ++i<span class="Delimiter">)</span>
<span id="L52" class="LineNr"> 52 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9998</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;result &quot;</span> &lt;&lt; i &lt;&lt; <span class="Constant">&quot; is &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">))</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L53" class="LineNr"> 53 </span> <span class="Comment">// make return products available to caller</span>
<span id="L54" class="LineNr"> 54 </span> copy<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>begin<span class="Delimiter">(),</span> ingredients<span class="Delimiter">.</span><a href='003trace.cc.html#L197'>end</a><span class="Delimiter">(),</span> inserter<span class="Delimiter">(</span>products<span class="Delimiter">,</span> products<span class="Delimiter">.</span>begin<span class="Delimiter">()));</span>
<span id="L55" class="LineNr"> 55 </span> <span class="Comment">// End Return</span>
<span id="L56" class="LineNr"> 56 </span> <span class="Identifier">break</span><span class="Delimiter">;</span> <span class="Comment">// continue to process rest of *caller* instruction</span>
<span id="L57" class="LineNr"> 57 </span><span class="Delimiter">}</span>
<span id="L58" class="LineNr"> 58 </span>
<span id="L59" class="LineNr"> 59 </span><span class="Comment">//: Types in return instructions are checked ahead of time.</span>
<span id="L60" class="LineNr"> 60 </span>
<span id="L61" class="LineNr"> 61 </span><span class="Delimiter">:(before &quot;End Checks&quot;)</span>
<span id="L62" class="LineNr"> 62 </span>Transform<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span><a href='028call_return.cc.html#L64'>check_types_of_return_instructions</a><span class="Delimiter">);</span> <span class="Comment">// idempotent</span>
<span id="L63" class="LineNr"> 63 </span><span class="Delimiter">:(code)</span>
<span id="L64" class="LineNr"> 64 </span><span class="Normal">void</span> <a href='028call_return.cc.html#L64'>check_types_of_return_instructions</a><span class="Delimiter">(</span><span class="Normal">const</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L65" class="LineNr"> 65 </span> <span class="Normal">const</span> recipe&amp; caller = get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">);</span>
<span id="L66" class="LineNr"> 66 </span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;--- check types of return instructions in <a href='010vm.cc.html#L19'>recipe</a> &quot;</span> &lt;&lt; caller<span class="Delimiter">.</span>name &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L67" class="LineNr"> 67 </span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span> i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>steps<span class="Delimiter">);</span> ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L68" class="LineNr"> 68 </span> <span class="Conceal">¦</span> <span class="Normal">const</span> instruction&amp; caller_instruction = caller<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
<span id="L69" class="LineNr"> 69 </span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>caller_instruction<span class="Delimiter">.</span>is_label<span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
<span id="L70" class="LineNr"> 70 </span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>caller_instruction<span class="Delimiter">.</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
<span id="L71" class="LineNr"> 71 </span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='028call_return.cc.html#L115'>is_primitive</a><span class="Delimiter">(</span>caller_instruction<span class="Delimiter">.</span>operation<span class="Delimiter">))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
<span id="L72" class="LineNr"> 72 </span> <span class="Conceal">¦</span> <span class="Normal">const</span> recipe&amp; callee = get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> caller_instruction<span class="Delimiter">.</span>operation<span class="Delimiter">);</span>
<span id="L73" class="LineNr"> 73 </span> <span class="Conceal">¦</span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span> i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>callee<span class="Delimiter">.</span>steps<span class="Delimiter">);</span> ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L74" class="LineNr"> 74 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">const</span> instruction&amp; return_inst = callee<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
<span id="L75" class="LineNr"> 75 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>return_inst<span class="Delimiter">.</span>operation != RETURN<span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
<span id="L76" class="LineNr"> 76 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Comment">// check types with the caller</span>
<span id="L77" class="LineNr"> 77 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller_instruction<span class="Delimiter">.</span>products<span class="Delimiter">)</span> &gt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>return_inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">))</span> <span class="Delimiter">{</span>
<span id="L78" class="LineNr"> 78 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;too few values returned from &quot;</span> &lt;&lt; callee<span class="Delimiter">.</span>name &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L79" class="LineNr"> 79 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L80" class="LineNr"> 80 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>
<span id="L81" class="LineNr"> 81 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span> i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller_instruction<span class="Delimiter">.</span>products<span class="Delimiter">);</span> ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L82" class="LineNr"> 82 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> lhs = return_inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
<span id="L83" class="LineNr"> 83 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> rhs = caller_instruction<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
<span id="L84" class="LineNr"> 84 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Comment">// End Check RETURN Copy(lhs, rhs)</span>
<span id="L85" class="LineNr"> 85 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!types_coercible<span class="Delimiter">(</span>rhs<span class="Delimiter">,</span> lhs<span class="Delimiter">))</span> <span class="Delimiter">{</span>
<span id="L86" class="LineNr"> 86 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>callee<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; return_inst<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot; ingredient '&quot;</span> &lt;&lt; lhs<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;' can't be saved in '&quot;</span> &lt;&lt; rhs<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
<span id="L87" class="LineNr"> 87 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot; ['&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>lhs<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;' vs '&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>rhs<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;']</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L88" class="LineNr"> 88 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Identifier">goto</span> finish_return_check<span class="Delimiter">;</span>
<span id="L89" class="LineNr"> 89 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>
<span id="L90" class="LineNr"> 90 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>
<span id="L91" class="LineNr"> 91 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Comment">// check that any return ingredients with /same-as-ingredient connect up</span>
<span id="L92" class="LineNr"> 92 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Comment">// the corresponding ingredient and product in the caller.</span>
<span id="L93" class="LineNr"> 93 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span> i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller_instruction<span class="Delimiter">.</span>products<span class="Delimiter">);</span> ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L94" class="LineNr"> 94 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>has_property<span class="Delimiter">(</span>return_inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">),</span> <span class="Constant">&quot;same-as-ingredient&quot;</span><span class="Delimiter">))</span> <span class="Delimiter">{</span>
<span id="L95" class="LineNr"> 95 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> string_tree* tmp = property<span class="Delimiter">(</span>return_inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">),</span> <span class="Constant">&quot;same-as-ingredient&quot;</span><span class="Delimiter">);</span>
<span id="L96" class="LineNr"> 96 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!tmp || !tmp<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L97" class="LineNr"> 97 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'same-as-ingredient' metadata should take exactly one value in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>return_inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L98" class="LineNr"> 98 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Identifier">goto</span> finish_return_check<span class="Delimiter">;</span>
<span id="L99" class="LineNr"> 99 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>
<span id="L100" class="LineNr">100 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">int</span> ingredient_index = <a href='002test.cc.html#L91'>to_integer</a><span class="Delimiter">(</span>tmp<span class="Delimiter">-&gt;</span>value<span class="Delimiter">);</span>
<span id="L101" class="LineNr">101 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>ingredient_index &gt;= <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller_instruction<span class="Delimiter">.</span>ingredients<span class="Delimiter">))</span> <span class="Delimiter">{</span>
<span id="L102" class="LineNr">102 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;too few ingredients in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>caller_instruction<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L103" class="LineNr">103 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Identifier">goto</span> finish_return_check<span class="Delimiter">;</span>
<span id="L104" class="LineNr">104 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>
<span id="L105" class="LineNr">105 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!is_dummy<span class="Delimiter">(</span>caller_instruction<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">))</span> &amp;&amp; !is_literal<span class="Delimiter">(</span>caller_instruction<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>ingredient_index<span class="Delimiter">))</span> &amp;&amp; caller_instruction<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>name != caller_instruction<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>ingredient_index<span class="Delimiter">).</span>name<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L106" class="LineNr">106 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>caller_instruction<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;' should write to '&quot;</span> &lt;&lt; caller_instruction<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>ingredient_index<span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;' rather than '&quot;</span> &lt;&lt; caller_instruction<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L107" class="LineNr">107 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>
<span id="L108" class="LineNr">108 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>
<span id="L109" class="LineNr">109 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>
<span id="L110" class="LineNr">110 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">finish_return_check</span>:<span class="Delimiter">;</span>
<span id="L111" class="LineNr">111 </span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>
<span id="L112" class="LineNr">112 </span> <span class="Delimiter">}</span>
<span id="L113" class="LineNr">113 </span><span class="Delimiter">}</span>
<span id="L114" class="LineNr">114 </span>
<span id="L115" class="LineNr">115 </span><span class="Normal">bool</span> <a href='028call_return.cc.html#L115'>is_primitive</a><span class="Delimiter">(</span><a href='010vm.cc.html#L14'>recipe_ordinal</a> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L116" class="LineNr">116 </span> <span class="Identifier">return</span> r &lt; <a href='010vm.cc.html#L191'>MAX_PRIMITIVE_RECIPES</a><span class="Delimiter">;</span>
<span id="L117" class="LineNr">117 </span><span class="Delimiter">}</span>
<span id="L118" class="LineNr">118 </span>
<span id="L119" class="LineNr">119 </span><span class="Delimiter">:(scenario return_type_mismatch)</span>
<span id="L120" class="LineNr">120 </span><span class="Special">% Hide_errors = true;</span>
<span id="L121" class="LineNr">121 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
<span id="L122" class="LineNr">122 </span> <span class="Constant">3</span>:num<span class="Special"> &lt;- </span>f <span class="Constant">2</span>
<span id="L123" class="LineNr">123 </span>]
<span id="L124" class="LineNr">124 </span><span class="muRecipe">def</span> f [
<span id="L125" class="LineNr">125 </span> <span class="Constant">12</span>:num<span class="Special"> &lt;- </span>next-ingredient
<span id="L126" class="LineNr">126 </span> <span class="Constant">13</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">35</span>
<span id="L127" class="LineNr">127 </span> <span class="Constant">14</span>:point<span class="Special"> &lt;- </span>copy <span class="Constant">12</span>:point/<span class="Special">raw</span>
<span id="L128" class="LineNr">128 </span> <span class="Identifier">return</span> <span class="Constant">14</span>:point
<span id="L129" class="LineNr">129 </span>]
<span id="L130" class="LineNr">130 </span><span class="traceContains">+error: f: return ingredient '14:point' can't be saved in '3:num'</span>
<span id="L131" class="LineNr">131 </span>
<span id="L132" class="LineNr">132 </span><span class="Comment">//: In Mu we'd like to assume that any instruction doesn't modify its</span>
<span id="L133" class="LineNr">133 </span><span class="Comment">//: ingredients unless they're also products. The /same-as-ingredient inside</span>
<span id="L134" class="LineNr">134 </span><span class="Comment">//: the recipe's 'return' indicates that an ingredient is intended to be</span>
<span id="L135" class="LineNr">135 </span><span class="Comment">//: modified in place, and will help catch accidental misuse of such</span>
<span id="L136" class="LineNr">136 </span><span class="Comment">//: 'ingredient-products' (sometimes called in-out parameters in other</span>
<span id="L137" class="LineNr">137 </span><span class="Comment">//: languages).</span>
<span id="L138" class="LineNr">138 </span>
<span id="L139" class="LineNr">139 </span><span class="Delimiter">:(scenario return_same_as_ingredient)</span>
<span id="L140" class="LineNr">140 </span><span class="Special">% Hide_errors = true;</span>
<span id="L141" class="LineNr">141 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
<span id="L142" class="LineNr">142 </span> <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
<span id="L143" class="LineNr">143 </span> <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>test1 <span class="Constant">1</span>:num <span class="Comment"># call with different ingredient and product</span>
<span id="L144" class="LineNr">144 </span>]
<span id="L145" class="LineNr">145 </span><span class="muRecipe">def</span> test1 [
<span id="L146" class="LineNr">146 </span> <span class="Constant">10</span>:num<span class="Special"> &lt;- </span>next-ingredient
<span id="L147" class="LineNr">147 </span> <span class="Identifier">return</span> <span class="Constant">10</span>:num/same-as-ingredient:<span class="Constant">0</span>
<span id="L148" class="LineNr">148 </span>]
<span id="L149" class="LineNr">149 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: '2:num &lt;- test1 1:num' should write to '1:num' rather than '2:num'</span>
<span id="L150" class="LineNr">150 </span>
<span id="L151" class="LineNr">151 </span><span class="Delimiter">:(scenario return_same_as_ingredient_dummy)</span>
<span id="L152" class="LineNr">152 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
<span id="L153" class="LineNr">153 </span> <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
<span id="L154" class="LineNr">154 </span> _<span class="Special"> &lt;- </span>test1 <span class="Constant">1</span>:num <span class="Comment"># call with different ingredient and product</span>
<span id="L155" class="LineNr">155 </span>]
<span id="L156" class="LineNr">156 </span><span class="muRecipe">def</span> test1 [
<span id="L157" class="LineNr">157 </span> <span class="Constant">10</span>:num<span class="Special"> &lt;- </span>next-ingredient
<span id="L158" class="LineNr">158 </span> <span class="Identifier">return</span> <span class="Constant">10</span>:num/same-as-ingredient:<span class="Constant">0</span>
<span id="L159" class="LineNr">159 </span>]
<span id="L160" class="LineNr">160 </span>$error: <span class="Constant">0</span>
<span id="L161" class="LineNr">161 </span>
<span id="L162" class="LineNr">162 </span><span class="Delimiter">:(code)</span>
<span id="L163" class="LineNr">163 </span>string <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span><span class="Normal">const</span> vector&lt;<span class="Normal">double</span>&gt;&amp; in<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L164" class="LineNr">164 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>in<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Identifier">return</span> <span class="Constant">&quot;[]&quot;</span><span class="Delimiter">;</span>
<span id="L165" class="LineNr">165 </span> ostringstream out<span class="Delimiter">;</span>
<span id="L166" class="LineNr">166 </span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>in<span class="Delimiter">)</span> == <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L167" class="LineNr">167 </span> <span class="Conceal">¦</span> out &lt;&lt; no_scientific<span class="Delimiter">(</span>in<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">));</span>
<span id="L168" class="LineNr">168 </span> <span class="Conceal">¦</span> <span class="Identifier">return</span> out<span class="Delimiter">.</span>str<span class="Delimiter">();</span>
<span id="L169" class="LineNr">169 </span> <span class="Delimiter">}</span>
<span id="L170" class="LineNr">170 </span> out &lt;&lt; <span class="Constant">&quot;[&quot;</span><span class="Delimiter">;</span>
<span id="L171" class="LineNr">171 </span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span> i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span> ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L172" class="LineNr">172 </span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>i &gt; <span class="Constant">0</span><span class="Delimiter">)</span> out &lt;&lt; <span class="Constant">&quot;, &quot;</span><span class="Delimiter">;</span>
<span id="L173" class="LineNr">173 </span> <span class="Conceal">¦</span> out &lt;&lt; no_scientific<span class="Delimiter">(</span>in<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">));</span>
<span id="L174" class="LineNr">174 </span> <span class="Delimiter">}</span>
<span id="L175" class="LineNr">175 </span> out &lt;&lt; <span class="Constant">&quot;]&quot;</span><span class="Delimiter">;</span>
<span id="L176" class="LineNr">176 </span> <span class="Identifier">return</span> out<span class="Delimiter">.</span>str<span class="Delimiter">();</span>
<span id="L177" class="LineNr">177 </span><span class="Delimiter">}</span>
</pre>
</body>
</html>

View File

@ -70,7 +70,7 @@ if ('onhashchange' in window) {
<span id="L3" class="LineNr"> 3 </span><span class="Delimiter">:(before &quot;End Mu Types Initialization&quot;)</span>
<span id="L4" class="LineNr"> 4 </span><span class="Comment">//: We'll use this container as a running example in scenarios below.</span>
<span id="L5" class="LineNr"> 5 </span><a href='010vm.cc.html#L123'>type_ordinal</a> point = <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;point&quot;</span><span class="Delimiter">,</span> Next_type_ordinal++<span class="Delimiter">);</span>
<span id="L6" class="LineNr"> 6 </span><a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Type<span class="Delimiter">,</span> point<span class="Delimiter">);</span> <span class="Comment">// initialize</span>
<span id="L6" class="LineNr"> 6 </span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Type<span class="Delimiter">,</span> point<span class="Delimiter">);</span> <span class="Comment">// initialize</span>
<span id="L7" class="LineNr"> 7 </span>get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> point<span class="Delimiter">).</span>kind = <a href='010vm.cc.html#L173'>CONTAINER</a><span class="Delimiter">;</span>
<span id="L8" class="LineNr"> 8 </span>get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> point<span class="Delimiter">).</span>name = <span class="Constant">&quot;point&quot;</span><span class="Delimiter">;</span>
<span id="L9" class="LineNr"> 9 </span>get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> point<span class="Delimiter">).</span>elements<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>reagent<span class="Delimiter">(</span><span class="Constant">&quot;x:number&quot;</span><span class="Delimiter">));</span>
@ -103,7 +103,7 @@ if ('onhashchange' in window) {
<span id="L36" class="LineNr"> 36 </span><span class="Comment">// A more complex example container, containing another container as one of</span>
<span id="L37" class="LineNr"> 37 </span><span class="Comment">// its elements.</span>
<span id="L38" class="LineNr"> 38 </span><a href='010vm.cc.html#L123'>type_ordinal</a> point_number = <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;point-number&quot;</span><span class="Delimiter">,</span> Next_type_ordinal++<span class="Delimiter">);</span>
<span id="L39" class="LineNr"> 39 </span><a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Type<span class="Delimiter">,</span> point_number<span class="Delimiter">);</span> <span class="Comment">// initialize</span>
<span id="L39" class="LineNr"> 39 </span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Type<span class="Delimiter">,</span> point_number<span class="Delimiter">);</span> <span class="Comment">// initialize</span>
<span id="L40" class="LineNr"> 40 </span>get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> point_number<span class="Delimiter">).</span>kind = <a href='010vm.cc.html#L173'>CONTAINER</a><span class="Delimiter">;</span>
<span id="L41" class="LineNr"> 41 </span>get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> point_number<span class="Delimiter">).</span>name = <span class="Constant">&quot;point-number&quot;</span><span class="Delimiter">;</span>
<span id="L42" class="LineNr"> 42 </span>get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> point_number<span class="Delimiter">).</span>elements<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>reagent<span class="Delimiter">(</span><span class="Constant">&quot;xy:point&quot;</span><span class="Delimiter">));</span>
@ -243,7 +243,7 @@ if ('onhashchange' in window) {
<span id="L176" class="LineNr">176 </span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9992</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;--- compute container sizes for &quot;</span> &lt;&lt; caller<span class="Delimiter">.</span>name &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L177" class="LineNr">177 </span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span> i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>steps<span class="Delimiter">);</span> ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L178" class="LineNr">178 </span> <span class="Conceal">¦</span> instruction&amp; inst = caller<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
<span id="L179" class="LineNr">179 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;- compute container sizes for &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L179" class="LineNr">179 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;- compute container sizes for &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L180" class="LineNr">180 </span> <span class="Conceal">¦</span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span> i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span> ++i<span class="Delimiter">)</span>
<span id="L181" class="LineNr">181 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> compute_container_sizes<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">),</span> <span class="Constant">&quot; in '&quot;</span>+to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span>+<span class="Constant">&quot;'&quot;</span><span class="Delimiter">);</span>
<span id="L182" class="LineNr">182 </span> <span class="Conceal">¦</span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span> i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">);</span> ++i<span class="Delimiter">)</span>
@ -264,13 +264,13 @@ if ('onhashchange' in window) {
<span id="L197" class="LineNr">197 </span>
<span id="L198" class="LineNr">198 </span><span class="Normal">void</span> compute_container_sizes<span class="Delimiter">(</span><span class="Normal">const</span> type_tree* type<span class="Delimiter">,</span> set&lt;type_tree&gt;&amp; pending_metadata<span class="Delimiter">,</span> <span class="Normal">const</span> string&amp; location_for_error_messages<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L199" class="LineNr">199 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
<span id="L200" class="LineNr">200 </span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;compute container sizes for &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>type<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L200" class="LineNr">200 </span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;compute container sizes for &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>type<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L201" class="LineNr">201 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>contains_key<span class="Delimiter">(</span>Container_metadata<span class="Delimiter">,</span> type<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
<span id="L202" class="LineNr">202 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>contains_key<span class="Delimiter">(</span>pending_metadata<span class="Delimiter">,</span> *type<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
<span id="L203" class="LineNr">203 </span> pending_metadata<span class="Delimiter">.</span>insert<span class="Delimiter">(</span>*type<span class="Delimiter">);</span>
<span id="L204" class="LineNr">204 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L205" class="LineNr">205 </span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L206" class="LineNr">206 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;invalid type &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>type<span class="Delimiter">)</span> &lt;&lt; location_for_error_messages &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L206" class="LineNr">206 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;invalid type &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>type<span class="Delimiter">)</span> &lt;&lt; location_for_error_messages &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L207" class="LineNr">207 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
<span id="L208" class="LineNr">208 </span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>
<span id="L209" class="LineNr">209 </span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>name == <span class="Constant">&quot;address&quot;</span><span class="Delimiter">)</span>
@ -741,7 +741,7 @@ if ('onhashchange' in window) {
<span id="L674" class="LineNr">674 </span> <span class="Delimiter">}</span>
<span id="L675" class="LineNr">675 </span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;parse&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;type number: &quot;</span> &lt;&lt; get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> name<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L676" class="LineNr">676 </span> <a href='030container.cc.html#L733'>skip_bracket</a><span class="Delimiter">(</span>in<span class="Delimiter">,</span> <span class="Constant">&quot;'&quot;</span>+command+<span class="Constant">&quot;' must begin with '['&quot;</span><span class="Delimiter">);</span>
<span id="L677" class="LineNr">677 </span> type_info&amp; info = <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Type<span class="Delimiter">,</span> get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> name<span class="Delimiter">));</span>
<span id="L677" class="LineNr">677 </span> type_info&amp; info = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Type<span class="Delimiter">,</span> get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> name<span class="Delimiter">));</span>
<span id="L678" class="LineNr">678 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>info<span class="Delimiter">.</span>Num_calls_to_transform_all_at_first_definition == -<span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L679" class="LineNr">679 </span> <span class="Conceal">¦</span> <span class="Comment">// initial definition of this container</span>
<span id="L680" class="LineNr">680 </span> <span class="Conceal">¦</span> info<span class="Delimiter">.</span>Num_calls_to_transform_all_at_first_definition = Num_calls_to_transform_all<span class="Delimiter">;</span>
@ -753,7 +753,7 @@ if ('onhashchange' in window) {
<span id="L686" class="LineNr">686 </span> <span class="Delimiter">}</span>
<span id="L687" class="LineNr">687 </span> info<span class="Delimiter">.</span>name = name<span class="Delimiter">;</span>
<span id="L688" class="LineNr">688 </span> info<span class="Delimiter">.</span>kind = kind<span class="Delimiter">;</span>
<span id="L689" class="LineNr">689 </span> <span class="Normal">while</span> <span class="Delimiter">(</span><a href='001help.cc.html#L238'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Delimiter">{</span>
<span id="L689" class="LineNr">689 </span> <span class="Normal">while</span> <span class="Delimiter">(</span><a href='001help.cc.html#L239'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Delimiter">{</span>
<span id="L690" class="LineNr">690 </span> <span class="Conceal">¦</span> <a href='011load.cc.html#L209'>skip_whitespace_and_comments</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
<span id="L691" class="LineNr">691 </span> <span class="Conceal">¦</span> string element = <a href='011load.cc.html#L167'>next_word</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
<span id="L692" class="LineNr">692 </span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>element<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
@ -765,7 +765,7 @@ if ('onhashchange' in window) {
<span id="L698" class="LineNr">698 </span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>in<span class="Delimiter">.</span>peek<span class="Delimiter">()</span> != <span class="cSpecial">'\n'</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L699" class="LineNr">699 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; command &lt;&lt; <span class="Constant">&quot; '&quot;</span> &lt;&lt; name &lt;&lt; <span class="Constant">&quot;' contains multiple elements on a single line. Containers and exclusive containers must only contain elements, one to a line, no code.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L700" class="LineNr">700 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Comment">// skip rest of container declaration</span>
<span id="L701" class="LineNr">701 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">while</span> <span class="Delimiter">(</span><a href='001help.cc.html#L238'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Delimiter">{</span>
<span id="L701" class="LineNr">701 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">while</span> <span class="Delimiter">(</span><a href='001help.cc.html#L239'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Delimiter">{</span>
<span id="L702" class="LineNr">702 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='011load.cc.html#L209'>skip_whitespace_and_comments</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
<span id="L703" class="LineNr">703 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='011load.cc.html#L167'>next_word</a><span class="Delimiter">(</span>in<span class="Delimiter">)</span> == <span class="Constant">&quot;]&quot;</span><span class="Delimiter">)</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L704" class="LineNr">704 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>
@ -774,7 +774,7 @@ if ('onhashchange' in window) {
<span id="L707" class="LineNr">707 </span> <span class="Conceal">¦</span> info<span class="Delimiter">.</span>elements<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>reagent<span class="Delimiter">(</span>element<span class="Delimiter">));</span>
<span id="L708" class="LineNr">708 </span> <span class="Conceal">¦</span> expand_type_abbreviations<span class="Delimiter">(</span>info<span class="Delimiter">.</span>elements<span class="Delimiter">.</span>back<span class="Delimiter">().</span>type<span class="Delimiter">);</span> <span class="Comment">// todo: use abbreviation before declaration</span>
<span id="L709" class="LineNr">709 </span> <span class="Conceal">¦</span> <a href='030container.cc.html#L715'>replace_unknown_types_with_unique_ordinals</a><span class="Delimiter">(</span>info<span class="Delimiter">.</span>elements<span class="Delimiter">.</span>back<span class="Delimiter">().</span>type<span class="Delimiter">,</span> info<span class="Delimiter">);</span>
<span id="L710" class="LineNr">710 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;parse&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; element: &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>info<span class="Delimiter">.</span>elements<span class="Delimiter">.</span>back<span class="Delimiter">())</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L710" class="LineNr">710 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;parse&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; element: &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>info<span class="Delimiter">.</span>elements<span class="Delimiter">.</span>back<span class="Delimiter">())</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L711" class="LineNr">711 </span> <span class="Conceal">¦</span> <span class="Comment">// End Load Container Element Definition</span>
<span id="L712" class="LineNr">712 </span> <span class="Delimiter">}</span>
<span id="L713" class="LineNr">713 </span><span class="Delimiter">}</span>
@ -828,7 +828,7 @@ if ('onhashchange' in window) {
<span id="L761" class="LineNr">761 </span><span class="Delimiter">:(code)</span>
<span id="L762" class="LineNr">762 </span><span class="Comment">// extremely inefficient; we process all types over and over again, once for every single recipe</span>
<span id="L763" class="LineNr">763 </span><span class="Comment">// but it doesn't seem to cause any noticeable slowdown</span>
<span id="L764" class="LineNr">764 </span><span class="Normal">void</span> <a href='030container.cc.html#L764'>expand_type_abbreviations_in_containers</a><span class="Delimiter">(</span><a href='001help.cc.html#L258'>unused</a> <span class="Normal">const</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L764" class="LineNr">764 </span><span class="Normal">void</span> <a href='030container.cc.html#L764'>expand_type_abbreviations_in_containers</a><span class="Delimiter">(</span><a href='001help.cc.html#L259'>unused</a> <span class="Normal">const</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L765" class="LineNr">765 </span> <span class="Normal">for</span> <span class="Delimiter">(</span>map&lt;type_ordinal<span class="Delimiter">,</span> type_info&gt;::iterator p = Type<span class="Delimiter">.</span>begin<span class="Delimiter">();</span> p != Type<span class="Delimiter">.</span><a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span> ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L766" class="LineNr">766 </span> <span class="Conceal">¦</span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span> i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>p<span class="Delimiter">-&gt;</span>second<span class="Delimiter">.</span>elements<span class="Delimiter">);</span> ++i<span class="Delimiter">)</span>
<span id="L767" class="LineNr">767 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> expand_type_abbreviations<span class="Delimiter">(</span>p<span class="Delimiter">-&gt;</span>second<span class="Delimiter">.</span>elements<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>type<span class="Delimiter">);</span>

View File

@ -226,7 +226,7 @@ if ('onhashchange' in window) {
<span id="L161" class="LineNr">161 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>state<span class="Delimiter">.</span>data<span class="Delimiter">.</span>top<span class="Delimiter">().</span>container_element_index == <span class="Constant">0</span> &amp;&amp; <a href='021check_instruction.cc.html#L115'>types_coercible</a><span class="Delimiter">(</span>container<span class="Delimiter">,</span> inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>ingredient_index<span class="Delimiter">)))</span>
<span id="L162" class="LineNr">162 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
<span id="L163" class="LineNr">163 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">const</span> reagent&amp; expected_ingredient = <a href='030container.cc.html#L429'>element_type</a><span class="Delimiter">(</span>container<span class="Delimiter">.</span>type<span class="Delimiter">,</span> state<span class="Delimiter">.</span>data<span class="Delimiter">.</span>top<span class="Delimiter">().</span>container_element_index<span class="Delimiter">);</span>
<span id="L164" class="LineNr">164 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;checking container &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>container<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; || &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>expected_ingredient<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; vs ingredient &quot;</span> &lt;&lt; ingredient_index &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L164" class="LineNr">164 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;checking container &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>container<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; || &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>expected_ingredient<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; vs ingredient &quot;</span> &lt;&lt; ingredient_index &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L165" class="LineNr">165 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Comment">// if the current element is the ingredient we expect, move on to the next element/ingredient</span>
<span id="L166" class="LineNr">166 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='021check_instruction.cc.html#L115'>types_coercible</a><span class="Delimiter">(</span>expected_ingredient<span class="Delimiter">,</span> ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>ingredient_index<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
<span id="L167" class="LineNr">167 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> ++ingredient_index<span class="Delimiter">;</span>

View File

@ -185,7 +185,7 @@ if ('onhashchange' in window) {
<span id="L120" class="LineNr">120 </span> <span class="Conceal">¦</span> <span class="Comment">// get size from type</span>
<span id="L121" class="LineNr">121 </span> <span class="Conceal">¦</span> <span class="Identifier">return</span> <a href='002test.cc.html#L91'>to_integer</a><span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>name<span class="Delimiter">);</span>
<span id="L122" class="LineNr">122 </span> <span class="Delimiter">}</span>
<span id="L123" class="LineNr">123 </span> cerr &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
<span id="L123" class="LineNr">123 </span> cerr &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
<span id="L124" class="LineNr">124 </span> assert<span class="Delimiter">(</span><span class="Constant">false</span><span class="Delimiter">);</span>
<span id="L125" class="LineNr">125 </span><span class="Delimiter">}</span>
<span id="L126" class="LineNr">126 </span>
@ -424,7 +424,7 @@ if ('onhashchange' in window) {
<span id="L359" class="LineNr">359 </span> reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> index = <a href='026call.cc.html#L87'>current_instruction</a><span class="Delimiter">().</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
<span id="L360" class="LineNr">360 </span> <span class="Comment">// Update INDEX index in Run</span>
<span id="L361" class="LineNr">361 </span> vector&lt;<span class="Normal">double</span>&gt; index_val<span class="Delimiter">(</span>read_memory<span class="Delimiter">(</span>index<span class="Delimiter">));</span>
<span id="L362" class="LineNr">362 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>index_val<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)</span> &lt; <span class="Constant">0</span> || index_val<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)</span> &gt;= <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> base_address<span class="Delimiter">))</span> <span class="Delimiter">{</span>
<span id="L362" class="LineNr">362 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>index_val<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)</span> &lt; <span class="Constant">0</span> || index_val<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)</span> &gt;= <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> base_address<span class="Delimiter">))</span> <span class="Delimiter">{</span>
<span id="L363" class="LineNr">363 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span><a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;invalid index &quot;</span> &lt;&lt; no_scientific<span class="Delimiter">(</span>index_val<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &lt;&lt; <span class="Constant">&quot; in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>current_instruction<span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L364" class="LineNr">364 </span> <span class="Conceal">¦</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L365" class="LineNr">365 </span> <span class="Delimiter">}</span>
@ -432,7 +432,7 @@ if ('onhashchange' in window) {
<span id="L367" class="LineNr">367 </span> element<span class="Delimiter">.</span>type = <a href='032array.cc.html#L377'>copy_array_element</a><span class="Delimiter">(</span>base<span class="Delimiter">.</span>type<span class="Delimiter">);</span>
<span id="L368" class="LineNr">368 </span> element<span class="Delimiter">.</span><a href='010vm.cc.html#L65'>set_value</a><span class="Delimiter">(</span>base_address + <span class="Comment">/*</span><span class="Comment">skip length</span><span class="Comment">*/</span><span class="Constant">1</span> + index_val<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)</span>*size_of<span class="Delimiter">(</span>element<span class="Delimiter">.</span>type<span class="Delimiter">));</span>
<span id="L369" class="LineNr">369 </span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9998</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;address to copy is &quot;</span> &lt;&lt; element<span class="Delimiter">.</span>value &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L370" class="LineNr">370 </span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9998</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;its type is &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>element<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L370" class="LineNr">370 </span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9998</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;its type is &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>element<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L371" class="LineNr">371 </span> <span class="Comment">// Read element</span>
<span id="L372" class="LineNr">372 </span> products<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>read_memory<span class="Delimiter">(</span>element<span class="Delimiter">));</span>
<span id="L373" class="LineNr">373 </span> <span class="Identifier">break</span><span class="Delimiter">;</span>
@ -468,7 +468,7 @@ if ('onhashchange' in window) {
<span id="L403" class="LineNr">403 </span> <span class="Conceal">¦</span> <span class="Identifier">return</span> <a href='002test.cc.html#L91'>to_integer</a><span class="Delimiter">(</span>x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>name<span class="Delimiter">);</span>
<span id="L404" class="LineNr">404 </span> <span class="Delimiter">}</span>
<span id="L405" class="LineNr">405 </span> <span class="Comment">// this should never happen at transform time</span>
<span id="L406" class="LineNr">406 </span> <span class="Identifier">return</span> <a href='001help.cc.html#L228'>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="L406" class="LineNr">406 </span> <span class="Identifier">return</span> <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> x<span class="Delimiter">.</span>value<span class="Delimiter">);</span>
<span id="L407" class="LineNr">407 </span><span class="Delimiter">}</span>
<span id="L408" class="LineNr">408 </span>
<span id="L409" class="LineNr">409 </span><span class="Delimiter">:(before &quot;End Unit Tests&quot;)</span>
@ -614,7 +614,7 @@ if ('onhashchange' in window) {
<span id="L549" class="LineNr">549 </span> reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> index = <a href='026call.cc.html#L87'>current_instruction</a><span class="Delimiter">().</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
<span id="L550" class="LineNr">550 </span> <span class="Comment">// Update PUT_INDEX index in Run</span>
<span id="L551" class="LineNr">551 </span> vector&lt;<span class="Normal">double</span>&gt; index_val<span class="Delimiter">(</span>read_memory<span class="Delimiter">(</span>index<span class="Delimiter">));</span>
<span id="L552" class="LineNr">552 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>index_val<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)</span> &lt; <span class="Constant">0</span> || index_val<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)</span> &gt;= <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> base_address<span class="Delimiter">))</span> <span class="Delimiter">{</span>
<span id="L552" class="LineNr">552 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>index_val<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)</span> &lt; <span class="Constant">0</span> || index_val<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)</span> &gt;= <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> base_address<span class="Delimiter">))</span> <span class="Delimiter">{</span>
<span id="L553" class="LineNr">553 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span><a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;invalid index &quot;</span> &lt;&lt; no_scientific<span class="Delimiter">(</span>index_val<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &lt;&lt; <span class="Constant">&quot; in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>current_instruction<span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L554" class="LineNr">554 </span> <span class="Conceal">¦</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L555" class="LineNr">555 </span> <span class="Delimiter">}</span>
@ -711,7 +711,7 @@ if ('onhashchange' in window) {
<span id="L646" class="LineNr">646 </span> <span class="Conceal">¦</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L647" class="LineNr">647 </span> <span class="Delimiter">}</span>
<span id="L648" class="LineNr">648 </span> products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
<span id="L649" class="LineNr">649 </span> products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> array<span class="Delimiter">.</span>value<span class="Delimiter">));</span>
<span id="L649" class="LineNr">649 </span> products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> array<span class="Delimiter">.</span>value<span class="Delimiter">));</span>
<span id="L650" class="LineNr">650 </span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L651" class="LineNr">651 </span><span class="Delimiter">}</span>
<span id="L652" class="LineNr">652 </span>

View File

@ -73,7 +73,7 @@ if ('onhashchange' in window) {
<span id="L8" class="LineNr"> 8 </span><span class="Comment">//: We'll use this container as a running example, with two number elements.</span>
<span id="L9" class="LineNr"> 9 </span><span class="Delimiter">{</span>
<span id="L10" class="LineNr"> 10 </span><a href='010vm.cc.html#L123'>type_ordinal</a> tmp = <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;number-or-point&quot;</span><span class="Delimiter">,</span> Next_type_ordinal++<span class="Delimiter">);</span>
<span id="L11" class="LineNr"> 11 </span><a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Type<span class="Delimiter">,</span> tmp<span class="Delimiter">);</span> <span class="Comment">// initialize</span>
<span id="L11" class="LineNr"> 11 </span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Type<span class="Delimiter">,</span> tmp<span class="Delimiter">);</span> <span class="Comment">// initialize</span>
<span id="L12" class="LineNr"> 12 </span>get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> tmp<span class="Delimiter">).</span>kind = <a href='010vm.cc.html#L174'>EXCLUSIVE_CONTAINER</a><span class="Delimiter">;</span>
<span id="L13" class="LineNr"> 13 </span>get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> tmp<span class="Delimiter">).</span>name = <span class="Constant">&quot;number-or-point&quot;</span><span class="Delimiter">;</span>
<span id="L14" class="LineNr"> 14 </span>get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> tmp<span class="Delimiter">).</span>elements<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>reagent<span class="Delimiter">(</span><span class="Constant">&quot;i:number&quot;</span><span class="Delimiter">));</span>
@ -199,7 +199,7 @@ if ('onhashchange' in window) {
<span id="L134" class="LineNr">134 </span> <span class="Delimiter">}</span>
<span id="L135" class="LineNr">135 </span> <span class="Normal">const</span> reagent&amp; variant = variant_type<span class="Delimiter">(</span>base<span class="Delimiter">,</span> offset<span class="Delimiter">.</span>value<span class="Delimiter">);</span>
<span id="L136" class="LineNr">136 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>!types_coercible<span class="Delimiter">(</span>product<span class="Delimiter">,</span> variant<span class="Delimiter">))</span> <span class="Delimiter">{</span>
<span id="L137" class="LineNr">137 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'maybe-convert &quot;</span> &lt;&lt; base<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;, &quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;' should write to &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>variant<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; but '&quot;</span> &lt;&lt; product<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;' has type &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>product<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L137" class="LineNr">137 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'maybe-convert &quot;</span> &lt;&lt; base<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;, &quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;' should write to &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>variant<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; but '&quot;</span> &lt;&lt; product<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;' has type &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>product<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L138" class="LineNr">138 </span> <span class="Conceal">¦</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L139" class="LineNr">139 </span> <span class="Delimiter">}</span>
<span id="L140" class="LineNr">140 </span> reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> status = inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
@ -226,14 +226,14 @@ if ('onhashchange' in window) {
<span id="L161" class="LineNr">161 </span> <span class="Comment">// Update MAYBE_CONVERT status in Run</span>
<span id="L162" class="LineNr">162 </span> <span class="Comment">// optimization: directly write results to only update first product when necessary</span>
<span id="L163" class="LineNr">163 </span> write_products = <span class="Constant">false</span><span class="Delimiter">;</span>
<span id="L164" class="LineNr">164 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>tag == <span class="Normal">static_cast</span>&lt;<span class="Normal">int</span>&gt;<span class="Delimiter">(</span><a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> base_address<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
<span id="L164" class="LineNr">164 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>tag == <span class="Normal">static_cast</span>&lt;<span class="Normal">int</span>&gt;<span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> base_address<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
<span id="L165" class="LineNr">165 </span> <span class="Conceal">¦</span> <span class="Normal">const</span> reagent&amp; variant = variant_type<span class="Delimiter">(</span>base<span class="Delimiter">,</span> tag<span class="Delimiter">);</span>
<span id="L166" class="LineNr">166 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;storing 1 in location &quot;</span> &lt;&lt; status<span class="Delimiter">.</span>value &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L167" class="LineNr">167 </span> <span class="Conceal">¦</span> <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> status<span class="Delimiter">.</span>value<span class="Delimiter">,</span> <span class="Constant">1</span><span class="Delimiter">);</span>
<span id="L168" class="LineNr">168 </span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!is_dummy<span class="Delimiter">(</span>product<span class="Delimiter">))</span> <span class="Delimiter">{</span>
<span id="L169" class="LineNr">169 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Comment">// Write Memory in Successful MAYBE_CONVERT in Run</span>
<span id="L170" class="LineNr">170 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span> i &lt; size_of<span class="Delimiter">(</span>variant<span class="Delimiter">);</span> ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L171" class="LineNr">171 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">double</span> val = <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> base_address+<span class="Comment">/*</span><span class="Comment">skip tag</span><span class="Comment">*/</span><span class="Constant">1</span>+i<span class="Delimiter">);</span>
<span id="L171" class="LineNr">171 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">double</span> val = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> base_address+<span class="Comment">/*</span><span class="Comment">skip tag</span><span class="Comment">*/</span><span class="Constant">1</span>+i<span class="Delimiter">);</span>
<span id="L172" class="LineNr">172 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;storing &quot;</span> &lt;&lt; no_scientific<span class="Delimiter">(</span>val<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; in location &quot;</span> &lt;&lt; product<span class="Delimiter">.</span>value+i &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L173" class="LineNr">173 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> product<span class="Delimiter">.</span>value+i<span class="Delimiter">,</span> val<span class="Delimiter">);</span>
<span id="L174" class="LineNr">174 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>
@ -383,7 +383,7 @@ if ('onhashchange' in window) {
<span id="L318" class="LineNr">318 </span><span class="Delimiter">:(before &quot;End <a href='031merge.cc.html#L142'>check_merge_call</a> Special-cases&quot;)</span>
<span id="L319" class="LineNr">319 </span><span class="Normal">case</span> <a href='010vm.cc.html#L174'>EXCLUSIVE_CONTAINER</a>: <span class="Delimiter">{</span>
<span id="L320" class="LineNr">320 </span> assert<span class="Delimiter">(</span>state<span class="Delimiter">.</span>data<span class="Delimiter">.</span>top<span class="Delimiter">().</span>container_element_index == <span class="Constant">0</span><span class="Delimiter">);</span>
<span id="L321" class="LineNr">321 </span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;checking exclusive container &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>container<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; vs ingredient &quot;</span> &lt;&lt; ingredient_index &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L321" class="LineNr">321 </span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;checking exclusive container &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>container<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; vs ingredient &quot;</span> &lt;&lt; ingredient_index &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L322" class="LineNr">322 </span> <span class="Comment">// easy case: exact match</span>
<span id="L323" class="LineNr">323 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>types_strictly_match<span class="Delimiter">(</span>container<span class="Delimiter">,</span> inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>ingredient_index<span class="Delimiter">)))</span>
<span id="L324" class="LineNr">324 </span> <span class="Conceal">¦</span> <span class="Identifier">return</span><span class="Delimiter">;</span>

View File

@ -271,7 +271,7 @@ if ('onhashchange' in window) {
<span id="L207" class="LineNr">207 </span><span class="Normal">void</span> drop_from_type<span class="Delimiter">(</span>reagent&amp; r<span class="Delimiter">,</span> string expected_type<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L208" class="LineNr">208 </span> assert<span class="Delimiter">(</span>!r<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">);</span>
<span id="L209" class="LineNr">209 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>r<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>name != expected_type<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L210" class="LineNr">210 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;can't drop2 &quot;</span> &lt;&lt; expected_type &lt;&lt; <span class="Constant">&quot; from '&quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>r<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
<span id="L210" class="LineNr">210 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;can't drop2 &quot;</span> &lt;&lt; expected_type &lt;&lt; <span class="Constant">&quot; from '&quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>r<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
<span id="L211" class="LineNr">211 </span> <span class="Conceal">¦</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
<span id="L212" class="LineNr">212 </span> <span class="Delimiter">}</span>
<span id="L213" class="LineNr">213 </span> <span class="Comment">// r.type = r.type-&gt;right</span>

View File

@ -164,8 +164,8 @@ if ('onhashchange' in window) {
<span id="L99" class="LineNr"> 99 </span>
<span id="L100" class="LineNr">100 </span><span class="Normal">void</span> lookup_memory_core<span class="Delimiter">(</span>reagent&amp; x<span class="Delimiter">,</span> <span class="Normal">bool</span> check_for_null<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L101" class="LineNr">101 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>x<span class="Delimiter">.</span>value == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
<span id="L102" class="LineNr">102 </span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;location &quot;</span> &lt;&lt; x<span class="Delimiter">.</span>value &lt;&lt; <span class="Constant">&quot; is &quot;</span> &lt;&lt; no_scientific<span class="Delimiter">(</span><a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> x<span class="Delimiter">.</span>value<span class="Delimiter">))</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L103" class="LineNr">103 </span> x<span class="Delimiter">.</span><a href='010vm.cc.html#L65'>set_value</a><span class="Delimiter">(</span><a href='001help.cc.html#L228'>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="L102" class="LineNr">102 </span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;location &quot;</span> &lt;&lt; x<span class="Delimiter">.</span>value &lt;&lt; <span class="Constant">&quot; is &quot;</span> &lt;&lt; no_scientific<span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> x<span class="Delimiter">.</span>value<span class="Delimiter">))</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L103" class="LineNr">103 </span> x<span class="Delimiter">.</span><a href='010vm.cc.html#L65'>set_value</a><span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> x<span class="Delimiter">.</span>value<span class="Delimiter">));</span>
<span id="L104" class="LineNr">104 </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="L105" class="LineNr">105 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>x<span class="Delimiter">.</span>value<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L106" class="LineNr">106 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;skipping refcount at &quot;</span> &lt;&lt; x<span class="Delimiter">.</span>value &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
@ -239,7 +239,7 @@ if ('onhashchange' in window) {
<span id="L174" class="LineNr">174 </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="L175" class="LineNr">175 </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="L176" class="LineNr">176 </span> <span class="Conceal">¦</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 != get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;address&quot;</span><span class="Delimiter">))</span> <span class="Delimiter">{</span>
<span id="L177" class="LineNr">177 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>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#L162'>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#L197'>end</a><span class="Delimiter">();</span>
<span id="L177" class="LineNr">177 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>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#L197'>end</a><span class="Delimiter">();</span>
<span id="L178" class="LineNr">178 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
<span id="L179" class="LineNr">179 </span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>
<span id="L180" class="LineNr">180 </span> <span class="Conceal">¦</span> drop_from_type<span class="Delimiter">(</span>r<span class="Delimiter">,</span> <span class="Constant">&quot;address&quot;</span><span class="Delimiter">);</span>
@ -578,7 +578,7 @@ if ('onhashchange' in window) {
<span id="L513" class="LineNr">513 </span><span class="Normal">case</span> _DUMP: <span class="Delimiter">{</span>
<span id="L514" class="LineNr">514 </span> reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> after_canonize = <a href='026call.cc.html#L87'>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="L515" class="LineNr">515 </span> canonize<span class="Delimiter">(</span>after_canonize<span class="Delimiter">);</span>
<span id="L516" class="LineNr">516 </span> cerr &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span><a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">())</span> &lt;&lt; <a href='026call.cc.html#L87'>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#L87'>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#L228'>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="L516" class="LineNr">516 </span> cerr &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span><a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">())</span> &lt;&lt; <a href='026call.cc.html#L87'>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#L87'>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="L517" class="LineNr">517 </span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L518" class="LineNr">518 </span><span class="Delimiter">}</span>
<span id="L519" class="LineNr">519 </span>
@ -593,7 +593,7 @@ if ('onhashchange' in window) {
<span id="L528" class="LineNr">528 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
<span id="L529" class="LineNr">529 </span><span class="Normal">case</span> _BAR: <span class="Delimiter">{</span>
<span id="L530" class="LineNr">530 </span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='026call.cc.html#L87'>current_instruction</a><span class="Delimiter">().</span>ingredients<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
<span id="L531" class="LineNr">531 </span> <span class="Conceal">¦</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#L228'>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="L531" class="LineNr">531 </span> <span class="Conceal">¦</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="L532" class="LineNr">532 </span> <span class="Conceal">¦</span> <span class="Normal">else</span> cerr &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
<span id="L533" class="LineNr">533 </span> <span class="Delimiter">}</span>
<span id="L534" class="LineNr">534 </span> <span class="Normal">else</span> <span class="Delimiter">{</span>

View File

@ -83,7 +83,7 @@ if ('onhashchange' in window) {
<span id="L18" class="LineNr"> 18 </span><span class="traceContains">+mem: decrementing refcount of 1000: 1 -&gt; 0</span>
<span id="L19" class="LineNr"> 19 </span>
<span id="L20" class="LineNr"> 20 </span><span class="Delimiter">:(after &quot;Writing Instruction Product(i)&quot;)</span>
<span id="L21" class="LineNr"> 21 </span><span class="Normal">if</span> <span class="Delimiter">(</span><a href='028call_return.cc.html#L114'>is_primitive</a><span class="Delimiter">(</span><a href='026call.cc.html#L87'>current_instruction</a><span class="Delimiter">().</span>operation<span class="Delimiter">))</span> <span class="Delimiter">{</span>
<span id="L21" class="LineNr"> 21 </span><span class="Normal">if</span> <span class="Delimiter">(</span><a href='028call_return.cc.html#L115'>is_primitive</a><span class="Delimiter">(</span><a href='026call.cc.html#L87'>current_instruction</a><span class="Delimiter">().</span>operation<span class="Delimiter">))</span> <span class="Delimiter">{</span>
<span id="L22" class="LineNr"> 22 </span> reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> tmp = <a href='026call.cc.html#L87'>current_instruction</a><span class="Delimiter">().</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
<span id="L23" class="LineNr"> 23 </span> canonize<span class="Delimiter">(</span>tmp<span class="Delimiter">);</span>
<span id="L24" class="LineNr"> 24 </span> <a href='036refcount.cc.html#L35'>update_any_refcounts</a><span class="Delimiter">(</span>tmp<span class="Delimiter">,</span> products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">));</span>
@ -116,7 +116,7 @@ if ('onhashchange' in window) {
<span id="L51" class="LineNr"> 51 </span> assert<span class="Delimiter">(</span>new_address &gt;= <span class="Constant">0</span><span class="Delimiter">);</span>
<span id="L52" class="LineNr"> 52 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>new_address == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
<span id="L53" class="LineNr"> 53 </span> ++Total_refcount_updates<span class="Delimiter">;</span>
<span id="L54" class="LineNr"> 54 </span> <span class="Normal">int</span> new_refcount = <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> new_address<span class="Delimiter">);</span>
<span id="L54" class="LineNr"> 54 </span> <span class="Normal">int</span> new_refcount = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> new_address<span class="Delimiter">);</span>
<span id="L55" class="LineNr"> 55 </span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;incrementing refcount of &quot;</span> &lt;&lt; new_address &lt;&lt; <span class="Constant">&quot;: &quot;</span> &lt;&lt; new_refcount &lt;&lt; <span class="Constant">&quot; -&gt; &quot;</span> &lt;&lt; new_refcount+<span class="Constant">1</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L56" class="LineNr"> 56 </span> <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> new_address<span class="Delimiter">,</span> new_refcount+<span class="Constant">1</span><span class="Delimiter">);</span>
<span id="L57" class="LineNr"> 57 </span><span class="Delimiter">}</span>
@ -125,7 +125,7 @@ if ('onhashchange' in window) {
<span id="L60" class="LineNr"> 60 </span> <span class="Comment">// Begin Decrement Refcounts(canonized_x)</span>
<span id="L61" class="LineNr"> 61 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>is_mu_address<span class="Delimiter">(</span>canonized_x<span class="Delimiter">)</span> &amp;&amp; canonized_x<span class="Delimiter">.</span>value != <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L62" class="LineNr"> 62 </span> <span class="Conceal">¦</span> assert<span class="Delimiter">(</span>!canonized_x<span class="Delimiter">.</span>metadata<span class="Delimiter">.</span>size<span class="Delimiter">);</span>
<span id="L63" class="LineNr"> 63 </span> <span class="Conceal">¦</span> <a href='036refcount.cc.html#L68'>decrement_refcount</a><span class="Delimiter">(</span><a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> canonized_x<span class="Delimiter">.</span>value<span class="Delimiter">),</span> <a href='030container.cc.html#L238'>payload_type</a><span class="Delimiter">(</span>canonized_x<span class="Delimiter">.</span>type<span class="Delimiter">),</span> <a href='036refcount.cc.html#L89'>payload_size</a><span class="Delimiter">(</span>canonized_x<span class="Delimiter">));</span>
<span id="L63" class="LineNr"> 63 </span> <span class="Conceal">¦</span> <a href='036refcount.cc.html#L68'>decrement_refcount</a><span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> canonized_x<span class="Delimiter">.</span>value<span class="Delimiter">),</span> <a href='030container.cc.html#L238'>payload_type</a><span class="Delimiter">(</span>canonized_x<span class="Delimiter">.</span>type<span class="Delimiter">),</span> <a href='036refcount.cc.html#L89'>payload_size</a><span class="Delimiter">(</span>canonized_x<span class="Delimiter">));</span>
<span id="L64" class="LineNr"> 64 </span> <span class="Delimiter">}</span>
<span id="L65" class="LineNr"> 65 </span> <span class="Comment">// End Decrement Refcounts(canonized_x)</span>
<span id="L66" class="LineNr"> 66 </span><span class="Delimiter">}</span>
@ -134,7 +134,7 @@ if ('onhashchange' in window) {
<span id="L69" class="LineNr"> 69 </span> assert<span class="Delimiter">(</span>old_address &gt;= <span class="Constant">0</span><span class="Delimiter">);</span>
<span id="L70" class="LineNr"> 70 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>old_address == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
<span id="L71" class="LineNr"> 71 </span> ++Total_refcount_updates<span class="Delimiter">;</span>
<span id="L72" class="LineNr"> 72 </span> <span class="Normal">int</span> old_refcount = <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> old_address<span class="Delimiter">);</span>
<span id="L72" class="LineNr"> 72 </span> <span class="Normal">int</span> old_refcount = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> old_address<span class="Delimiter">);</span>
<span id="L73" class="LineNr"> 73 </span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;decrementing refcount of &quot;</span> &lt;&lt; old_address &lt;&lt; <span class="Constant">&quot;: &quot;</span> &lt;&lt; old_refcount &lt;&lt; <span class="Constant">&quot; -&gt; &quot;</span> &lt;&lt; old_refcount-<span class="Constant">1</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L74" class="LineNr"> 74 </span> --old_refcount<span class="Delimiter">;</span>
<span id="L75" class="LineNr"> 75 </span> <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> old_address<span class="Delimiter">,</span> old_refcount<span class="Delimiter">);</span>
@ -257,7 +257,7 @@ if ('onhashchange' in window) {
<span id="L192" class="LineNr"> 192 </span><span class="Comment">// todo: double-check data here as well</span>
<span id="L193" class="LineNr"> 193 </span>vector&lt;<span class="Normal">double</span>&gt; data<span class="Delimiter">;</span>
<span id="L194" class="LineNr"> 194 </span><span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span> i &lt; size_of<span class="Delimiter">(</span>product<span class="Delimiter">);</span> ++i<span class="Delimiter">)</span>
<span id="L195" class="LineNr"> 195 </span> data<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span><a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> base_address+<span class="Comment">/*</span><span class="Comment">skip tag</span><span class="Comment">*/</span><span class="Constant">1</span>+i<span class="Delimiter">));</span>
<span id="L195" class="LineNr"> 195 </span> data<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> base_address+<span class="Comment">/*</span><span class="Comment">skip tag</span><span class="Comment">*/</span><span class="Constant">1</span>+i<span class="Delimiter">));</span>
<span id="L196" class="LineNr"> 196 </span><a href='036refcount.cc.html#L35'>update_any_refcounts</a><span class="Delimiter">(</span>product<span class="Delimiter">,</span> data<span class="Delimiter">);</span>
<span id="L197" class="LineNr"> 197 </span>
<span id="L198" class="LineNr"> 198 </span><span class="SalientComment">//:: manage refcounts in instructions that copy multiple locations at a time</span>
@ -377,7 +377,7 @@ if ('onhashchange' in window) {
<span id="L312" class="LineNr"> 312 </span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9992</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;--- compute <a href='043space.cc.html#L82'>address</a> offsets for &quot;</span> &lt;&lt; caller<span class="Delimiter">.</span>name &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L313" class="LineNr"> 313 </span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span> i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>steps<span class="Delimiter">);</span> ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L314" class="LineNr"> 314 </span> <span class="Conceal">¦</span> instruction&amp; inst = caller<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
<span id="L315" class="LineNr"> 315 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;- compute <a href='043space.cc.html#L82'>address</a> offsets for &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L315" class="LineNr"> 315 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;- compute <a href='043space.cc.html#L82'>address</a> offsets for &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L316" class="LineNr"> 316 </span> <span class="Conceal">¦</span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span> i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span> ++i<span class="Delimiter">)</span>
<span id="L317" class="LineNr"> 317 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> compute_container_address_offsets<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">),</span> <span class="Constant">&quot; in '&quot;</span>+inst<span class="Delimiter">.</span>original_string+<span class="Constant">&quot;'&quot;</span><span class="Delimiter">);</span>
<span id="L318" class="LineNr"> 318 </span> <span class="Conceal">¦</span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span> i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">);</span> ++i<span class="Delimiter">)</span>
@ -398,7 +398,7 @@ if ('onhashchange' in window) {
<span id="L333" class="LineNr"> 333 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
<span id="L334" class="LineNr"> 334 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L335" class="LineNr"> 335 </span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L336" class="LineNr"> 336 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;invalid type &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>type<span class="Delimiter">)</span> &lt;&lt; location_for_error_messages &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L336" class="LineNr"> 336 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;invalid type &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>type<span class="Delimiter">)</span> &lt;&lt; location_for_error_messages &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L337" class="LineNr"> 337 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
<span id="L338" class="LineNr"> 338 </span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>
<span id="L339" class="LineNr"> 339 </span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>name == <span class="Constant">&quot;address&quot;</span><span class="Delimiter">)</span>
@ -438,7 +438,7 @@ if ('onhashchange' in window) {
<span id="L373" class="LineNr"> 373 </span>
<span id="L374" class="LineNr"> 374 </span><span class="Normal">void</span> <a href='036refcount.cc.html#L374'>append_addresses</a><span class="Delimiter">(</span><span class="Normal">int</span> base_offset<span class="Delimiter">,</span> <span class="Normal">const</span> type_tree* type<span class="Delimiter">,</span> map&lt;set&lt;tag_condition_info&gt;<span class="Delimiter">,</span> set&lt;address_element_info&gt; &gt;&amp; out<span class="Delimiter">,</span> <span class="Normal">const</span> set&lt;tag_condition_info&gt;&amp; key<span class="Delimiter">,</span> <span class="Normal">const</span> string&amp; location_for_error_messages<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L375" class="LineNr"> 375 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>is_mu_address<span class="Delimiter">(</span>type<span class="Delimiter">))</span> <span class="Delimiter">{</span>
<span id="L376" class="LineNr"> 376 </span> <span class="Conceal">¦</span> <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>out<span class="Delimiter">,</span> key<span class="Delimiter">).</span>insert<span class="Delimiter">(</span>address_element_info<span class="Delimiter">(</span>base_offset<span class="Delimiter">,</span> <span class="Normal">new</span> type_tree<span class="Delimiter">(</span>*payload_type<span class="Delimiter">(</span>type<span class="Delimiter">))));</span>
<span id="L376" class="LineNr"> 376 </span> <span class="Conceal">¦</span> <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>out<span class="Delimiter">,</span> key<span class="Delimiter">).</span>insert<span class="Delimiter">(</span>address_element_info<span class="Delimiter">(</span>base_offset<span class="Delimiter">,</span> <span class="Normal">new</span> type_tree<span class="Delimiter">(</span>*payload_type<span class="Delimiter">(</span>type<span class="Delimiter">))));</span>
<span id="L377" class="LineNr"> 377 </span> <span class="Conceal">¦</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
<span id="L378" class="LineNr"> 378 </span> <span class="Delimiter">}</span>
<span id="L379" class="LineNr"> 379 </span> <span class="Normal">const</span> type_tree* base_type = type<span class="Delimiter">;</span>
@ -451,7 +451,7 @@ if ('onhashchange' in window) {
<span id="L386" class="LineNr"> 386 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Comment">// Compute Container Address Offset(element)</span>
<span id="L387" class="LineNr"> 387 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>is_mu_address<span class="Delimiter">(</span>element<span class="Delimiter">))</span> <span class="Delimiter">{</span>
<span id="L388" class="LineNr"> 388 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>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;address at offset &quot;</span> &lt;&lt; curr_offset &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L389" class="LineNr"> 389 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>out<span class="Delimiter">,</span> key<span class="Delimiter">).</span>insert<span class="Delimiter">(</span>address_element_info<span class="Delimiter">(</span>curr_offset<span class="Delimiter">,</span> <span class="Normal">new</span> type_tree<span class="Delimiter">(</span>*payload_type<span class="Delimiter">(</span>element<span class="Delimiter">.</span>type<span class="Delimiter">))));</span>
<span id="L389" class="LineNr"> 389 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>out<span class="Delimiter">,</span> key<span class="Delimiter">).</span>insert<span class="Delimiter">(</span>address_element_info<span class="Delimiter">(</span>curr_offset<span class="Delimiter">,</span> <span class="Normal">new</span> type_tree<span class="Delimiter">(</span>*payload_type<span class="Delimiter">(</span>element<span class="Delimiter">.</span>type<span class="Delimiter">))));</span>
<span id="L390" class="LineNr"> 390 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> ++curr_offset<span class="Delimiter">;</span>
<span id="L391" class="LineNr"> 391 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>
<span id="L392" class="LineNr"> 392 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span>is_mu_array<span class="Delimiter">(</span>element<span class="Delimiter">))</span> <span class="Delimiter">{</span>
@ -794,7 +794,7 @@ if ('onhashchange' in window) {
<span id="L729" class="LineNr"> 729 </span> <span class="Normal">for</span> <span class="Delimiter">(</span>map&lt;set&lt;tag_condition_info&gt;<span class="Delimiter">,</span> set&lt;address_element_info&gt; &gt;::const_iterator p = metadata<span class="Delimiter">.</span><a href='043space.cc.html#L82'>address</a><span class="Delimiter">.</span>begin<span class="Delimiter">();</span> p != metadata<span class="Delimiter">.</span><a href='043space.cc.html#L82'>address</a><span class="Delimiter">.</span><a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span> ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L730" class="LineNr"> 730 </span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!all_match<span class="Delimiter">(</span>data<span class="Delimiter">,</span> p<span class="Delimiter">-&gt;</span>first<span class="Delimiter">))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
<span id="L731" class="LineNr"> 731 </span> <span class="Conceal">¦</span> <span class="Normal">for</span> <span class="Delimiter">(</span>set&lt;address_element_info&gt;::const_iterator info = p<span class="Delimiter">-&gt;</span>second<span class="Delimiter">.</span>begin<span class="Delimiter">();</span> info != p<span class="Delimiter">-&gt;</span>second<span class="Delimiter">.</span><a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span> ++info<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L732" class="LineNr"> 732 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">int</span> element_address = <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> canonized_x<span class="Delimiter">.</span>value + info<span class="Delimiter">-&gt;</span>offset<span class="Delimiter">);</span>
<span id="L732" class="LineNr"> 732 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">int</span> element_address = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> canonized_x<span class="Delimiter">.</span>value + info<span class="Delimiter">-&gt;</span>offset<span class="Delimiter">);</span>
<span id="L733" class="LineNr"> 733 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> reagent<span class="Comment">/*</span><span class="Comment">local</span><span class="Comment">*/</span> element<span class="Delimiter">;</span>
<span id="L734" class="LineNr"> 734 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> element<span class="Delimiter">.</span><a href='010vm.cc.html#L65'>set_value</a><span class="Delimiter">(</span>element_address+<span class="Comment">/*</span><span class="Comment">skip refcount</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">);</span>
<span id="L735" class="LineNr"> 735 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> element<span class="Delimiter">.</span>type = <span class="Normal">new</span> type_tree<span class="Delimiter">(</span>*info<span class="Delimiter">-&gt;</span><a href='030container.cc.html#L238'>payload_type</a><span class="Delimiter">);</span>
@ -1138,7 +1138,7 @@ if ('onhashchange' in window) {
<span id="L1073" class="LineNr">1073 </span><span class="Normal">void</span> <a href='036refcount.cc.html#L1073'>dump_recipe_profile</a><span class="Delimiter">(</span><a href='010vm.cc.html#L14'>recipe_ordinal</a> ridx<span class="Delimiter">,</span> <span class="Normal">const</span> recipe&amp; r<span class="Delimiter">,</span> ostream&amp; out<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L1074" class="LineNr">1074 </span> out &lt;&lt; <span class="Constant">&quot;recipe &quot;</span> &lt;&lt; r<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot; [</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span>
<span id="L1075" class="LineNr">1075 </span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span> i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>r<span class="Delimiter">.</span>steps<span class="Delimiter">);</span> ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L1076" class="LineNr">1076 </span> <span class="Conceal">¦</span> out &lt;&lt; std::setw<span class="Delimiter">(</span><span class="Constant">6</span><span class="Delimiter">)</span> &lt;&lt; Num_refcount_updates[ridx][i] &lt;&lt; <span class="Constant">' '</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>r<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">))</span> &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
<span id="L1076" class="LineNr">1076 </span> <span class="Conceal">¦</span> out &lt;&lt; std::setw<span class="Delimiter">(</span><span class="Constant">6</span><span class="Delimiter">)</span> &lt;&lt; Num_refcount_updates[ridx][i] &lt;&lt; <span class="Constant">' '</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>r<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">))</span> &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
<span id="L1077" class="LineNr">1077 </span> <span class="Delimiter">}</span>
<span id="L1078" class="LineNr">1078 </span> out &lt;&lt; <span class="Constant">&quot;]</span><span class="cSpecial">\n\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span>
<span id="L1079" class="LineNr">1079 </span><span class="Delimiter">}</span>

View File

@ -91,7 +91,7 @@ if ('onhashchange' in window) {
<span id="L26" class="LineNr"> 26 </span>
<span id="L27" class="LineNr"> 27 </span><span class="Delimiter">:(code)</span>
<span id="L28" class="LineNr"> 28 </span><span class="Normal">void</span> <a href='037abandon.cc.html#L28'>abandon</a><span class="Delimiter">(</span><span class="Normal">int</span> <a href='043space.cc.html#L82'>address</a><span class="Delimiter">,</span> <span class="Normal">const</span> type_tree* <a href='030container.cc.html#L238'>payload_type</a><span class="Delimiter">,</span> <span class="Normal">int</span> <a href='036refcount.cc.html#L89'>payload_size</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L29" class="LineNr"> 29 </span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;abandon&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;updating refcounts inside &quot;</span> &lt;&lt; <a href='043space.cc.html#L82'>address</a> &lt;&lt; <span class="Constant">&quot;: &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span><a href='030container.cc.html#L238'>payload_type</a><span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L29" class="LineNr"> 29 </span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;abandon&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;updating refcounts inside &quot;</span> &lt;&lt; <a href='043space.cc.html#L82'>address</a> &lt;&lt; <span class="Constant">&quot;: &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span><a href='030container.cc.html#L238'>payload_type</a><span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L30" class="LineNr"> 30 </span><span class="CommentedCode">//? Total_free += size;</span>
<span id="L31" class="LineNr"> 31 </span><span class="CommentedCode">//? ++Num_free;</span>
<span id="L32" class="LineNr"> 32 </span><span class="CommentedCode">//? cerr &lt;&lt; &quot;abandon: &quot; &lt;&lt; size &lt;&lt; '\n';</span>
@ -99,7 +99,7 @@ if ('onhashchange' in window) {
<span id="L34" class="LineNr"> 34 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>is_mu_array<span class="Delimiter">(</span><a href='030container.cc.html#L238'>payload_type</a><span class="Delimiter">))</span> <span class="Delimiter">{</span>
<span id="L35" class="LineNr"> 35 </span> <span class="Conceal">¦</span> reagent<span class="Comment">/*</span><span class="Comment">local</span><span class="Comment">*/</span> element<span class="Delimiter">;</span>
<span id="L36" class="LineNr"> 36 </span> <span class="Conceal">¦</span> element<span class="Delimiter">.</span>type = <a href='032array.cc.html#L377'>copy_array_element</a><span class="Delimiter">(</span><a href='030container.cc.html#L238'>payload_type</a><span class="Delimiter">);</span>
<span id="L37" class="LineNr"> 37 </span> <span class="Conceal">¦</span> <span class="Normal">int</span> <a href='032array.cc.html#L397'>array_length</a> = <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> address+<span class="Comment">/*</span><span class="Comment">skip refcount</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">);</span>
<span id="L37" class="LineNr"> 37 </span> <span class="Conceal">¦</span> <span class="Normal">int</span> <a href='032array.cc.html#L397'>array_length</a> = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> address+<span class="Comment">/*</span><span class="Comment">skip refcount</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">);</span>
<span id="L38" class="LineNr"> 38 </span> <span class="Conceal">¦</span> assert<span class="Delimiter">(</span>element<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>name != <span class="Constant">&quot;array&quot;</span><span class="Delimiter">);</span>
<span id="L39" class="LineNr"> 39 </span> <span class="Conceal">¦</span> <span class="Normal">int</span> element_size = size_of<span class="Delimiter">(</span>element<span class="Delimiter">);</span>
<span id="L40" class="LineNr"> 40 </span> <span class="Conceal">¦</span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span> i &lt; <a href='032array.cc.html#L397'>array_length</a><span class="Delimiter">;</span> ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
@ -118,19 +118,19 @@ if ('onhashchange' in window) {
<span id="L53" class="LineNr"> 53 </span> <span class="Conceal">¦</span> <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> curr<span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">);</span>
<span id="L54" class="LineNr"> 54 </span> <span class="Comment">// append existing free list to address</span>
<span id="L55" class="LineNr"> 55 </span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;abandon&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;saving &quot;</span> &lt;&lt; <a href='043space.cc.html#L82'>address</a> &lt;&lt; <span class="Constant">&quot; in free-list of size &quot;</span> &lt;&lt; <a href='036refcount.cc.html#L89'>payload_size</a> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L56" class="LineNr"> 56 </span> <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> <a href='043space.cc.html#L82'>address</a><span class="Delimiter">,</span> <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Current_routine<span class="Delimiter">-&gt;</span>free_list<span class="Delimiter">,</span> <a href='036refcount.cc.html#L89'>payload_size</a><span class="Delimiter">));</span>
<span id="L56" class="LineNr"> 56 </span> <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> <a href='043space.cc.html#L82'>address</a><span class="Delimiter">,</span> <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Current_routine<span class="Delimiter">-&gt;</span>free_list<span class="Delimiter">,</span> <a href='036refcount.cc.html#L89'>payload_size</a><span class="Delimiter">));</span>
<span id="L57" class="LineNr"> 57 </span> <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Current_routine<span class="Delimiter">-&gt;</span>free_list<span class="Delimiter">,</span> <a href='036refcount.cc.html#L89'>payload_size</a><span class="Delimiter">,</span> <a href='043space.cc.html#L82'>address</a><span class="Delimiter">);</span>
<span id="L58" class="LineNr"> 58 </span><span class="Delimiter">}</span>
<span id="L59" class="LineNr"> 59 </span>
<span id="L60" class="LineNr"> 60 </span><span class="Delimiter">:(after &quot;Allocate Special-cases&quot;)</span>
<span id="L61" class="LineNr"> 61 </span><span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Current_routine<span class="Delimiter">-&gt;</span>free_list<span class="Delimiter">,</span> size<span class="Delimiter">))</span> <span class="Delimiter">{</span>
<span id="L61" class="LineNr"> 61 </span><span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Current_routine<span class="Delimiter">-&gt;</span>free_list<span class="Delimiter">,</span> size<span class="Delimiter">))</span> <span class="Delimiter">{</span>
<span id="L62" class="LineNr"> 62 </span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;abandon&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;picking up space from free-list of size &quot;</span> &lt;&lt; size &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L63" class="LineNr"> 63 </span> <span class="Normal">int</span> result = <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Current_routine<span class="Delimiter">-&gt;</span>free_list<span class="Delimiter">,</span> size<span class="Delimiter">);</span>
<span id="L63" class="LineNr"> 63 </span> <span class="Normal">int</span> result = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Current_routine<span class="Delimiter">-&gt;</span>free_list<span class="Delimiter">,</span> size<span class="Delimiter">);</span>
<span id="L64" class="LineNr"> 64 </span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;new alloc from free list: &quot;</span> &lt;&lt; result &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L65" class="LineNr"> 65 </span> <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Current_routine<span class="Delimiter">-&gt;</span>free_list<span class="Delimiter">,</span> size<span class="Delimiter">,</span> <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> result<span class="Delimiter">));</span>
<span id="L65" class="LineNr"> 65 </span> <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Current_routine<span class="Delimiter">-&gt;</span>free_list<span class="Delimiter">,</span> size<span class="Delimiter">,</span> <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> result<span class="Delimiter">));</span>
<span id="L66" class="LineNr"> 66 </span> <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> result<span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">);</span>
<span id="L67" class="LineNr"> 67 </span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> curr = result<span class="Delimiter">;</span> curr &lt; result+size<span class="Delimiter">;</span> ++curr<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L68" class="LineNr"> 68 </span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> curr<span class="Delimiter">)</span> != <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L68" class="LineNr"> 68 </span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> curr<span class="Delimiter">)</span> != <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L69" class="LineNr"> 69 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span><a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;memory in free list was not zeroed out: &quot;</span> &lt;&lt; curr &lt;&lt; <span class="Constant">'/'</span> &lt;&lt; result &lt;&lt; <span class="Constant">&quot;; somebody wrote to us after free!!!</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L70" class="LineNr"> 70 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Identifier">break</span><span class="Delimiter">;</span> <span class="Comment">// always fatal</span>
<span id="L71" class="LineNr"> 71 </span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>

View File

@ -146,13 +146,13 @@ if ('onhashchange' in window) {
<span id="L81" class="LineNr"> 81 </span><span class="traceContains">+app: foo: abc</span>
<span id="L82" class="LineNr"> 82 </span>
<span id="L83" class="LineNr"> 83 </span><span class="Delimiter">:(before &quot;End inspect Special-cases(r, data)&quot;)</span>
<span id="L84" class="LineNr"> 84 </span><span class="Normal">if</span> <span class="Delimiter">(</span><a href='027call_ingredient.cc.html#L174'>is_mu_text</a><span class="Delimiter">(</span>r<span class="Delimiter">))</span> <span class="Delimiter">{</span>
<span id="L84" class="LineNr"> 84 </span><span class="Normal">if</span> <span class="Delimiter">(</span><a href='027call_ingredient.cc.html#L177'>is_mu_text</a><span class="Delimiter">(</span>r<span class="Delimiter">))</span> <span class="Delimiter">{</span>
<span id="L85" class="LineNr"> 85 </span> assert<span class="Delimiter">(</span>scalar<span class="Delimiter">(</span>data<span class="Delimiter">));</span>
<span id="L86" class="LineNr"> 86 </span> <span class="Identifier">return</span> <a href='038new_text.cc.html#L143'>read_mu_text</a><span class="Delimiter">(</span>data<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">));</span>
<span id="L87" class="LineNr"> 87 </span><span class="Delimiter">}</span>
<span id="L88" class="LineNr"> 88 </span>
<span id="L89" class="LineNr"> 89 </span><span class="Delimiter">:(before &quot;End $print Special-cases&quot;)</span>
<span id="L90" class="LineNr"> 90 </span><span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='027call_ingredient.cc.html#L174'>is_mu_text</a><span class="Delimiter">(</span><a href='026call.cc.html#L87'>current_instruction</a><span class="Delimiter">().</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
<span id="L90" class="LineNr"> 90 </span><span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='027call_ingredient.cc.html#L177'>is_mu_text</a><span class="Delimiter">(</span><a href='026call.cc.html#L87'>current_instruction</a><span class="Delimiter">().</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
<span id="L91" class="LineNr"> 91 </span> cout &lt;&lt; <a href='038new_text.cc.html#L143'>read_mu_text</a><span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">));</span>
<span id="L92" class="LineNr"> 92 </span><span class="Delimiter">}</span>
<span id="L93" class="LineNr"> 93 </span>
@ -208,7 +208,7 @@ if ('onhashchange' in window) {
<span id="L143" class="LineNr">143 </span>string <a href='038new_text.cc.html#L143'>read_mu_text</a><span class="Delimiter">(</span><span class="Normal">int</span> <a href='043space.cc.html#L82'>address</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L144" class="LineNr">144 </span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='043space.cc.html#L82'>address</a> == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">;</span>
<span id="L145" class="LineNr">145 </span> ++address<span class="Delimiter">;</span> <span class="Comment">// skip refcount</span>
<span id="L146" class="LineNr">146 </span> <span class="Normal">int</span> length = <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> <a href='043space.cc.html#L82'>address</a><span class="Delimiter">);</span>
<span id="L146" class="LineNr">146 </span> <span class="Normal">int</span> length = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> <a href='043space.cc.html#L82'>address</a><span class="Delimiter">);</span>
<span id="L147" class="LineNr">147 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>length == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">;</span>
<span id="L148" class="LineNr">148 </span> <span class="Identifier">return</span> <a href='038new_text.cc.html#L151'>read_mu_characters</a><span class="Delimiter">(</span>address+<span class="Constant">1</span><span class="Delimiter">,</span> length<span class="Delimiter">);</span>
<span id="L149" class="LineNr">149 </span><span class="Delimiter">}</span>
@ -216,7 +216,7 @@ if ('onhashchange' in window) {
<span id="L151" class="LineNr">151 </span>string <a href='038new_text.cc.html#L151'>read_mu_characters</a><span class="Delimiter">(</span><span class="Normal">int</span> start<span class="Delimiter">,</span> <span class="Normal">int</span> length<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L152" class="LineNr">152 </span> ostringstream tmp<span class="Delimiter">;</span>
<span id="L153" class="LineNr">153 </span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> curr = start<span class="Delimiter">;</span> curr &lt; start+length<span class="Delimiter">;</span> ++curr<span class="Delimiter">)</span>
<span id="L154" class="LineNr">154 </span> <span class="Conceal">¦</span> tmp &lt;&lt; to_unicode<span class="Delimiter">(</span><span class="Normal">static_cast</span>&lt;<span class="Normal">uint32_t</span>&gt;<span class="Delimiter">(</span><a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> curr<span class="Delimiter">)));</span>
<span id="L154" class="LineNr">154 </span> <span class="Conceal">¦</span> tmp &lt;&lt; to_unicode<span class="Delimiter">(</span><span class="Normal">static_cast</span>&lt;<span class="Normal">uint32_t</span>&gt;<span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> curr<span class="Delimiter">)));</span>
<span id="L155" class="LineNr">155 </span> <span class="Identifier">return</span> tmp<span class="Delimiter">.</span>str<span class="Delimiter">();</span>
<span id="L156" class="LineNr">156 </span><span class="Delimiter">}</span>
<span id="L157" class="LineNr">157 </span>
@ -277,7 +277,7 @@ if ('onhashchange' in window) {
<span id="L212" class="LineNr">212 </span><span class="Normal">case</span> _READ: <span class="Delimiter">{</span>
<span id="L213" class="LineNr">213 </span> <a href='038new_text.cc.html#L223'>skip_whitespace</a><span class="Delimiter">(</span>cin<span class="Delimiter">);</span>
<span id="L214" class="LineNr">214 </span> string result<span class="Delimiter">;</span>
<span id="L215" class="LineNr">215 </span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L238'>has_data</a><span class="Delimiter">(</span>cin<span class="Delimiter">))</span>
<span id="L215" class="LineNr">215 </span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L239'>has_data</a><span class="Delimiter">(</span>cin<span class="Delimiter">))</span>
<span id="L216" class="LineNr">216 </span> <span class="Conceal">¦</span> cin &gt;&gt; result<span class="Delimiter">;</span>
<span id="L217" class="LineNr">217 </span> products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
<span id="L218" class="LineNr">218 </span> products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><a href='038new_text.cc.html#L38'>new_mu_text</a><span class="Delimiter">(</span>result<span class="Delimiter">));</span>

View File

@ -148,7 +148,7 @@ if ('onhashchange' in window) {
<span id="L82" class="LineNr"> 82 </span><span class="Normal">int</span> <a href='043space.cc.html#L82'>address</a><span class="Delimiter">(</span><span class="Normal">int</span> offset<span class="Delimiter">,</span> <span class="Normal">int</span> base<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L83" class="LineNr"> 83 </span> assert<span class="Delimiter">(</span>offset &gt;= <span class="Constant">0</span><span class="Delimiter">);</span>
<span id="L84" class="LineNr"> 84 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>base == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Identifier">return</span> offset<span class="Delimiter">;</span> <span class="Comment">// raw</span>
<span id="L85" class="LineNr"> 85 </span> <span class="Normal">int</span> size = <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> base<span class="Delimiter">);</span>
<span id="L85" class="LineNr"> 85 </span> <span class="Normal">int</span> size = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> base<span class="Delimiter">);</span>
<span id="L86" class="LineNr"> 86 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>offset &gt;= size<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L87" class="LineNr"> 87 </span> <span class="Conceal">¦</span> <span class="Comment">// todo: test</span>
<span id="L88" class="LineNr"> 88 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">()</span> &lt;&lt; <span class="Constant">&quot;: location &quot;</span> &lt;&lt; offset &lt;&lt; <span class="Constant">&quot; is out of bounds &quot;</span> &lt;&lt; size &lt;&lt; <span class="Constant">&quot; at &quot;</span> &lt;&lt; base &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
@ -164,7 +164,7 @@ if ('onhashchange' in window) {
<span id="L98" class="LineNr"> 98 </span><span class="Delimiter">:(after &quot;Begin Preprocess write_memory(x, data)&quot;)</span>
<span id="L99" class="LineNr"> 99 </span><span class="Normal">if</span> <span class="Delimiter">(</span>x<span class="Delimiter">.</span>name == <span class="Constant">&quot;default-space&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L100" class="LineNr">100 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>!scalar<span class="Delimiter">(</span>data<span class="Delimiter">)</span> || !is_mu_space<span class="Delimiter">(</span>x<span class="Delimiter">))</span>
<span id="L101" class="LineNr">101 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span><a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;'default-space' should be of type <a href='043space.cc.html#L82'>address</a>:array:location, but is &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>x<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L101" class="LineNr">101 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span><a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;'default-space' should be of type <a href='043space.cc.html#L82'>address</a>:array:location, but is &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>x<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L102" class="LineNr">102 </span> <a href='026call.cc.html#L81'>current_call</a><span class="Delimiter">().</span>default_space = data<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
<span id="L103" class="LineNr">103 </span> <span class="Identifier">return</span><span class="Delimiter">;</span>
<span id="L104" class="LineNr">104 </span><span class="Delimiter">}</span>
@ -314,7 +314,7 @@ if ('onhashchange' in window) {
<span id="L248" class="LineNr">248 </span><span class="Delimiter">}</span>
<span id="L249" class="LineNr">249 </span><span class="Delimiter">:(after &quot;Begin Decrement Refcounts(canonized_x)&quot;)</span>
<span id="L250" class="LineNr">250 </span><span class="Normal">if</span> <span class="Delimiter">(</span><a href='043space.cc.html#L106'>is_mu_space</a><span class="Delimiter">(</span>canonized_x<span class="Delimiter">))</span> <span class="Delimiter">{</span>
<span id="L251" class="LineNr">251 </span> <span class="Normal">int</span> space_address = <span class="Delimiter">(</span>canonized_x<span class="Delimiter">.</span>name == <span class="Constant">&quot;default-space&quot;</span><span class="Delimiter">)</span> ? <a href='026call.cc.html#L81'>current_call</a><span class="Delimiter">().</span>default_space : <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> canonized_x<span class="Delimiter">.</span>value<span class="Delimiter">);</span>
<span id="L251" class="LineNr">251 </span> <span class="Normal">int</span> space_address = <span class="Delimiter">(</span>canonized_x<span class="Delimiter">.</span>name == <span class="Constant">&quot;default-space&quot;</span><span class="Delimiter">)</span> ? <a href='026call.cc.html#L81'>current_call</a><span class="Delimiter">().</span>default_space : <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> canonized_x<span class="Delimiter">.</span>value<span class="Delimiter">);</span>
<span id="L252" class="LineNr">252 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>space_address == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
<span id="L253" class="LineNr">253 </span> <span class="Comment">// this branch relies on global state</span>
<span id="L254" class="LineNr">254 </span> string recipe_name<span class="Delimiter">;</span>
@ -324,7 +324,7 @@ if ('onhashchange' in window) {
<span id="L258" class="LineNr">258 </span> <span class="Delimiter">}</span>
<span id="L259" class="LineNr">259 </span> <span class="Normal">else</span> <span class="Delimiter">{</span>
<span id="L260" class="LineNr">260 </span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>canonized_x<span class="Delimiter">.</span>name != <span class="Constant">&quot;default-space&quot;</span><span class="Delimiter">)</span>
<span id="L261" class="LineNr">261 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> cerr &lt;&lt; <a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">()</span> &lt;&lt; <span class="Constant">&quot;: &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>canonized_x<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
<span id="L261" class="LineNr">261 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> cerr &lt;&lt; <a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">()</span> &lt;&lt; <span class="Constant">&quot;: &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>canonized_x<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
<span id="L262" class="LineNr">262 </span> <span class="Conceal">¦</span> assert<span class="Delimiter">(</span>canonized_x<span class="Delimiter">.</span>name == <span class="Constant">&quot;default-space&quot;</span><span class="Delimiter">);</span>
<span id="L263" class="LineNr">263 </span> <span class="Conceal">¦</span> recipe_name = <a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">();</span>
<span id="L264" class="LineNr">264 </span> <span class="Delimiter">}</span>
@ -356,7 +356,7 @@ if ('onhashchange' in window) {
<span id="L290" class="LineNr">290 </span><span class="traceContains">+mem: automatically abandoning 1000</span>
<span id="L291" class="LineNr">291 </span>
<span id="L292" class="LineNr">292 </span><span class="Delimiter">:(before &quot;Reclaim Space(space_address, space_recipe_ordinal, space_recipe)&quot;)</span>
<span id="L293" class="LineNr">293 </span><span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> space_address<span class="Delimiter">)</span> &lt;= <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L293" class="LineNr">293 </span><span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> space_address<span class="Delimiter">)</span> &lt;= <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L294" class="LineNr">294 </span> set&lt;string&gt; reclaimed_locals<span class="Delimiter">;</span>
<span id="L295" class="LineNr">295 </span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;trying to reclaim locals&quot;</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L296" class="LineNr">296 </span> <span class="Comment">// update any refcounts for variables in the space -- in the context of the space</span>

View File

@ -108,7 +108,7 @@ if ('onhashchange' in window) {
<span id="L45" class="LineNr">45 </span><span class="Normal">int</span> <a href='043space.cc.html#L78'>space_base</a><span class="Delimiter">(</span><span class="Normal">const</span> reagent&amp; x<span class="Delimiter">,</span> <span class="Normal">int</span> space_index<span class="Delimiter">,</span> <span class="Normal">int</span> base<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L46" class="LineNr">46 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>space_index == <span class="Constant">0</span><span class="Delimiter">)</span>
<span id="L47" class="LineNr">47 </span> <span class="Conceal">¦</span> <span class="Identifier">return</span> base<span class="Delimiter">;</span>
<span id="L48" class="LineNr">48 </span> <span class="Normal">int</span> result = <a href='043space.cc.html#L78'>space_base</a><span class="Delimiter">(</span>x<span class="Delimiter">,</span> space_index-<span class="Constant">1</span><span class="Delimiter">,</span> <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> base+<span class="Comment">/*</span><span class="Comment">skip length</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">))</span>+<span class="Comment">/*</span><span class="Comment">skip refcount</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">;</span>
<span id="L48" class="LineNr">48 </span> <span class="Normal">int</span> result = <a href='043space.cc.html#L78'>space_base</a><span class="Delimiter">(</span>x<span class="Delimiter">,</span> space_index-<span class="Constant">1</span><span class="Delimiter">,</span> <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> base+<span class="Comment">/*</span><span class="Comment">skip length</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">))</span>+<span class="Comment">/*</span><span class="Comment">skip refcount</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">;</span>
<span id="L49" class="LineNr">49 </span> <span class="Identifier">return</span> result<span class="Delimiter">;</span>
<span id="L50" class="LineNr">50 </span><span class="Delimiter">}</span>
<span id="L51" class="LineNr">51 </span>

View File

@ -165,7 +165,7 @@ if ('onhashchange' in window) {
<span id="L102" class="LineNr">102 </span><span class="Normal">int</span> lookup_name<span class="Delimiter">(</span><span class="Normal">const</span> reagent&amp; x<span class="Delimiter">,</span> <span class="Normal">const</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> r<span class="Delimiter">,</span> set&lt;recipe_ordinal&gt;&amp; done<span class="Delimiter">,</span> vector&lt;recipe_ordinal&gt;&amp; path<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L103" class="LineNr">103 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>!Name[r]<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Identifier">return</span> Name[r][x<span class="Delimiter">.</span>name]<span class="Delimiter">;</span>
<span id="L104" class="LineNr">104 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>contains_key<span class="Delimiter">(</span>done<span class="Delimiter">,</span> r<span class="Delimiter">))</span> <span class="Delimiter">{</span>
<span id="L105" class="LineNr">105 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;can't compute address of '&quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>x<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;' because</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
<span id="L105" class="LineNr">105 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;can't compute address of '&quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>x<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;' because</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
<span id="L106" class="LineNr">106 </span> <span class="Conceal">¦</span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">1</span><span class="Delimiter">;</span> i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>path<span class="Delimiter">);</span> ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L107" class="LineNr">107 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; path<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i-<span class="Constant">1</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; requires computing names of &quot;</span> &lt;&lt; path<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L108" class="LineNr">108 </span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>

View File

@ -499,9 +499,9 @@ if ('onhashchange' in window) {
<span id="L432" class="LineNr">432 </span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>contains_key<span class="Delimiter">(</span>locations_checked<span class="Delimiter">,</span> <a href='043space.cc.html#L82'>address</a><span class="Delimiter">))</span>
<span id="L433" class="LineNr">433 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span><a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;duplicate expectation for location '&quot;</span> &lt;&lt; address &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L434" class="LineNr">434 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;checking location &quot;</span> &lt;&lt; <a href='043space.cc.html#L82'>address</a> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L435" class="LineNr">435 </span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> <a href='043space.cc.html#L82'>address</a><span class="Delimiter">)</span> != value<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L435" class="LineNr">435 </span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> <a href='043space.cc.html#L82'>address</a><span class="Delimiter">)</span> != value<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L436" class="LineNr">436 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!Hide_errors<span class="Delimiter">)</span> cerr &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
<span id="L437" class="LineNr">437 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;F - &quot;</span> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span><a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;expected location '&quot;</span> &lt;&lt; address &lt;&lt; <span class="Constant">&quot;' to contain &quot;</span> &lt;&lt; no_scientific<span class="Delimiter">(</span>value<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; but saw &quot;</span> &lt;&lt; no_scientific<span class="Delimiter">(</span><a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> <a href='043space.cc.html#L82'>address</a><span class="Delimiter">))</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L437" class="LineNr">437 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;F - &quot;</span> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span><a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;expected location '&quot;</span> &lt;&lt; address &lt;&lt; <span class="Constant">&quot;' to contain &quot;</span> &lt;&lt; no_scientific<span class="Delimiter">(</span>value<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; but saw &quot;</span> &lt;&lt; no_scientific<span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> <a href='043space.cc.html#L82'>address</a><span class="Delimiter">))</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L438" class="LineNr">438 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!Scenario_testing_scenario<span class="Delimiter">)</span> Passed = <span class="Constant">false</span><span class="Delimiter">;</span>
<span id="L439" class="LineNr">439 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
<span id="L440" class="LineNr">440 </span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>
@ -545,7 +545,7 @@ if ('onhashchange' in window) {
<span id="L478" class="LineNr">478 </span>
<span id="L479" class="LineNr">479 </span><span class="Normal">void</span> check_mu_text<span class="Delimiter">(</span><span class="Normal">int</span> start<span class="Delimiter">,</span> <span class="Normal">const</span> string&amp; literal<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L480" class="LineNr">480 </span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;checking text length at &quot;</span> &lt;&lt; start &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L481" class="LineNr">481 </span> <span class="Normal">int</span> <a href='032array.cc.html#L397'>array_length</a> = <span class="Normal">static_cast</span>&lt;<span class="Normal">int</span>&gt;<span class="Delimiter">(</span><a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> start<span class="Delimiter">));</span>
<span id="L481" class="LineNr">481 </span> <span class="Normal">int</span> <a href='032array.cc.html#L397'>array_length</a> = <span class="Normal">static_cast</span>&lt;<span class="Normal">int</span>&gt;<span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> start<span class="Delimiter">));</span>
<span id="L482" class="LineNr">482 </span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='032array.cc.html#L397'>array_length</a> != <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>literal<span class="Delimiter">))</span> <span class="Delimiter">{</span>
<span id="L483" class="LineNr">483 </span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!Hide_errors<span class="Delimiter">)</span> cerr &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
<span id="L484" class="LineNr">484 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;F - &quot;</span> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span><a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;expected location '&quot;</span> &lt;&lt; start &lt;&lt; <span class="Constant">&quot;' to contain length &quot;</span> &lt;&lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>literal<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; of text [&quot;</span> &lt;&lt; literal &lt;&lt; <span class="Constant">&quot;] but saw &quot;</span> &lt;&lt; <a href='032array.cc.html#L397'>array_length</a> &lt;&lt; <span class="Constant">&quot; (for text [&quot;</span> &lt;&lt; <a href='038new_text.cc.html#L151'>read_mu_characters</a><span class="Delimiter">(</span>start+<span class="Comment">/*</span><span class="Comment">skip length</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">,</span> <a href='032array.cc.html#L397'>array_length</a><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;])</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
@ -555,9 +555,9 @@ if ('onhashchange' in window) {
<span id="L488" class="LineNr">488 </span> <span class="Normal">int</span> curr = start+<span class="Constant">1</span><span class="Delimiter">;</span> <span class="Comment">// now skip length</span>
<span id="L489" class="LineNr">489 </span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span> i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>literal<span class="Delimiter">);</span> ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L490" class="LineNr">490 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;checking location &quot;</span> &lt;&lt; curr+i &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L491" class="LineNr">491 </span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> curr+i<span class="Delimiter">)</span> != literal<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">))</span> <span class="Delimiter">{</span>
<span id="L491" class="LineNr">491 </span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> curr+i<span class="Delimiter">)</span> != literal<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">))</span> <span class="Delimiter">{</span>
<span id="L492" class="LineNr">492 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!Hide_errors<span class="Delimiter">)</span> cerr &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
<span id="L493" class="LineNr">493 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;F - &quot;</span> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span><a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;expected location &quot;</span> &lt;&lt; <span class="Delimiter">(</span>curr+i<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; to contain &quot;</span> &lt;&lt; literal<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; but saw &quot;</span> &lt;&lt; no_scientific<span class="Delimiter">(</span><a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> curr+i<span class="Delimiter">))</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L493" class="LineNr">493 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;F - &quot;</span> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span><a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;expected location &quot;</span> &lt;&lt; <span class="Delimiter">(</span>curr+i<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; to contain &quot;</span> &lt;&lt; literal<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; but saw &quot;</span> &lt;&lt; no_scientific<span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> curr+i<span class="Delimiter">))</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L494" class="LineNr">494 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!Scenario_testing_scenario<span class="Delimiter">)</span> Passed = <span class="Constant">false</span><span class="Delimiter">;</span>
<span id="L495" class="LineNr">495 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
<span id="L496" class="LineNr">496 </span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>

View File

@ -97,7 +97,7 @@ if ('onhashchange' in window) {
<span id="L31" class="LineNr"> 31 </span><span class="Delimiter">:(code)</span>
<span id="L32" class="LineNr"> 32 </span><span class="Normal">void</span> <a href='053recipe_header.cc.html#L32'>load_recipe_header</a><span class="Delimiter">(</span>istream&amp; in<span class="Delimiter">,</span> recipe&amp; result<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L33" class="LineNr"> 33 </span> result<span class="Delimiter">.</span>has_header = <span class="Constant">true</span><span class="Delimiter">;</span>
<span id="L34" class="LineNr"> 34 </span> <span class="Normal">while</span> <span class="Delimiter">(</span><a href='001help.cc.html#L238'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">)</span> &amp;&amp; in<span class="Delimiter">.</span>peek<span class="Delimiter">()</span> != <span class="Constant">'['</span> &amp;&amp; in<span class="Delimiter">.</span>peek<span class="Delimiter">()</span> != <span class="cSpecial">'\n'</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L34" class="LineNr"> 34 </span> <span class="Normal">while</span> <span class="Delimiter">(</span><a href='001help.cc.html#L239'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">)</span> &amp;&amp; in<span class="Delimiter">.</span>peek<span class="Delimiter">()</span> != <span class="Constant">'['</span> &amp;&amp; in<span class="Delimiter">.</span>peek<span class="Delimiter">()</span> != <span class="cSpecial">'\n'</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L35" class="LineNr"> 35 </span> <span class="Conceal">¦</span> string s = <a href='011load.cc.html#L167'>next_word</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
<span id="L36" class="LineNr"> 36 </span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>s<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
<span id="L37" class="LineNr"> 37 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> assert<span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">));</span>
@ -111,7 +111,7 @@ if ('onhashchange' in window) {
<span id="L45" class="LineNr"> 45 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;parse&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;header ingredient: &quot;</span> &lt;&lt; result<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>back<span class="Delimiter">().</span>original_string &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L46" class="LineNr"> 46 </span> <span class="Conceal">¦</span> skip_whitespace_but_not_newline<span class="Delimiter">(</span>in<span class="Delimiter">);</span>
<span id="L47" class="LineNr"> 47 </span> <span class="Delimiter">}</span>
<span id="L48" class="LineNr"> 48 </span> <span class="Normal">while</span> <span class="Delimiter">(</span><a href='001help.cc.html#L238'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">)</span> &amp;&amp; in<span class="Delimiter">.</span>peek<span class="Delimiter">()</span> != <span class="Constant">'['</span> &amp;&amp; in<span class="Delimiter">.</span>peek<span class="Delimiter">()</span> != <span class="cSpecial">'\n'</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L48" class="LineNr"> 48 </span> <span class="Normal">while</span> <span class="Delimiter">(</span><a href='001help.cc.html#L239'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">)</span> &amp;&amp; in<span class="Delimiter">.</span>peek<span class="Delimiter">()</span> != <span class="Constant">'['</span> &amp;&amp; in<span class="Delimiter">.</span>peek<span class="Delimiter">()</span> != <span class="cSpecial">'\n'</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L49" class="LineNr"> 49 </span> <span class="Conceal">¦</span> string s = <a href='011load.cc.html#L167'>next_word</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
<span id="L50" class="LineNr"> 50 </span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>s<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
<span id="L51" class="LineNr"> 51 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> assert<span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">));</span>
@ -242,7 +242,7 @@ if ('onhashchange' in window) {
<span id="L176" class="LineNr">176 </span><span class="Comment">//: Rewrite 'load-ingredients' to instructions to create all reagents in the header.</span>
<span id="L177" class="LineNr">177 </span>
<span id="L178" class="LineNr">178 </span><span class="Delimiter">:(before &quot;End Rewrite Instruction(curr, <a href='010vm.cc.html#L19'>recipe</a> result)&quot;)</span>
<span id="L179" class="LineNr">179 </span><span class="Normal">if</span> <span class="Delimiter">(</span>curr<span class="Delimiter">.</span>name == <span class="Constant">&quot;load-ingredients&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L179" class="LineNr">179 </span><span class="Normal">if</span> <span class="Delimiter">(</span>curr<span class="Delimiter">.</span>name == <span class="Constant">&quot;load-ingredients&quot;</span> || curr<span class="Delimiter">.</span>name == <span class="Constant">&quot;load-inputs&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L180" class="LineNr">180 </span> curr<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
<span id="L181" class="LineNr">181 </span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> op = get<span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;next-ingredient-without-typechecking&quot;</span><span class="Delimiter">);</span>
<span id="L182" class="LineNr">182 </span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span> i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>result<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span> ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
@ -357,7 +357,7 @@ if ('onhashchange' in window) {
<span id="L291" class="LineNr">291 </span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;--- type-check calls inside <a href='010vm.cc.html#L19'>recipe</a> &quot;</span> &lt;&lt; caller<span class="Delimiter">.</span>name &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L292" class="LineNr">292 </span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span> i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>steps<span class="Delimiter">);</span> ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L293" class="LineNr">293 </span> <span class="Conceal">¦</span> <span class="Normal">const</span> instruction&amp; inst = caller<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
<span id="L294" class="LineNr">294 </span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='028call_return.cc.html#L114'>is_primitive</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>operation<span class="Delimiter">))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
<span id="L294" class="LineNr">294 </span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='028call_return.cc.html#L115'>is_primitive</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>operation<span class="Delimiter">))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
<span id="L295" class="LineNr">295 </span> <span class="Conceal">¦</span> <span class="Normal">const</span> recipe&amp; callee = get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> inst<span class="Delimiter">.</span>operation<span class="Delimiter">);</span>
<span id="L296" class="LineNr">296 </span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!callee<span class="Delimiter">.</span>has_header<span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
<span id="L297" class="LineNr">297 </span> <span class="Conceal">¦</span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">long</span> <span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span> i &lt; min<span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">),</span> <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>callee<span class="Delimiter">.</span>ingredients<span class="Delimiter">));</span> ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
@ -515,7 +515,7 @@ if ('onhashchange' in window) {
<span id="L449" class="LineNr">449 </span> <span class="Delimiter">}</span>
<span id="L450" class="LineNr">450 </span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span> i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller_recipe<span class="Delimiter">.</span>steps<span class="Delimiter">);</span> ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L451" class="LineNr">451 </span> <span class="Conceal">¦</span> instruction&amp; inst = caller_recipe<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
<span id="L452" class="LineNr">452 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9992</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;instruction: &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L452" class="LineNr">452 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9992</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;instruction: &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L453" class="LineNr">453 </span> <span class="Conceal">¦</span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span> i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span> ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L454" class="LineNr">454 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>type<span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
<span id="L455" class="LineNr">455 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>header_type<span class="Delimiter">.</span>find<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>name<span class="Delimiter">)</span> == header_type<span class="Delimiter">.</span><a href='003trace.cc.html#L197'>end</a><span class="Delimiter">())</span>
@ -525,7 +525,7 @@ if ('onhashchange' in window) {
<span id="L459" class="LineNr">459 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;type of &quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>name &lt;&lt; <span class="Constant">&quot; is &quot;</span> &lt;&lt; names_to_string<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>type<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L460" class="LineNr">460 </span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>
<span id="L461" class="LineNr">461 </span> <span class="Conceal">¦</span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span> i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">);</span> ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L462" class="LineNr">462 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; product: &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">))</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L462" class="LineNr">462 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; product: &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">))</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L463" class="LineNr">463 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>type<span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
<span id="L464" class="LineNr">464 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>header_type<span class="Delimiter">.</span>find<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>name<span class="Delimiter">)</span> == header_type<span class="Delimiter">.</span><a href='003trace.cc.html#L197'>end</a><span class="Delimiter">())</span>
<span id="L465" class="LineNr">465 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>

View File

@ -105,7 +105,7 @@ if ('onhashchange' in window) {
<span id="L39" class="LineNr"> 39 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Comment">// variant doesn't already exist</span>
<span id="L40" class="LineNr"> 40 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> new_name = <a href='054static_dispatch.cc.html#L111'>next_unused_recipe_name</a><span class="Delimiter">(</span>result<span class="Delimiter">.</span>name<span class="Delimiter">);</span>
<span id="L41" class="LineNr"> 41 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> new_name<span class="Delimiter">,</span> Next_recipe_ordinal++<span class="Delimiter">);</span>
<span id="L42" class="LineNr"> 42 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Recipe_variants<span class="Delimiter">,</span> result<span class="Delimiter">.</span>name<span class="Delimiter">).</span>push_back<span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> new_name<span class="Delimiter">));</span>
<span id="L42" class="LineNr"> 42 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Recipe_variants<span class="Delimiter">,</span> result<span class="Delimiter">.</span>name<span class="Delimiter">).</span>push_back<span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> new_name<span class="Delimiter">));</span>
<span id="L43" class="LineNr"> 43 </span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>
<span id="L44" class="LineNr"> 44 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;load&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;switching &quot;</span> &lt;&lt; result<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot; to &quot;</span> &lt;&lt; new_name &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L45" class="LineNr"> 45 </span> <span class="Conceal">¦</span> result<span class="Delimiter">.</span>name = new_name<span class="Delimiter">;</span>
@ -115,12 +115,12 @@ if ('onhashchange' in window) {
<span id="L49" class="LineNr"> 49 </span><span class="Normal">else</span> <span class="Delimiter">{</span>
<span id="L50" class="LineNr"> 50 </span> <span class="Comment">// save first variant</span>
<span id="L51" class="LineNr"> 51 </span> <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> result<span class="Delimiter">.</span>name<span class="Delimiter">,</span> Next_recipe_ordinal++<span class="Delimiter">);</span>
<span id="L52" class="LineNr"> 52 </span> <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Recipe_variants<span class="Delimiter">,</span> result<span class="Delimiter">.</span>name<span class="Delimiter">).</span>push_back<span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> result<span class="Delimiter">.</span>name<span class="Delimiter">));</span>
<span id="L52" class="LineNr"> 52 </span> <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Recipe_variants<span class="Delimiter">,</span> result<span class="Delimiter">.</span>name<span class="Delimiter">).</span>push_back<span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> result<span class="Delimiter">.</span>name<span class="Delimiter">));</span>
<span id="L53" class="LineNr"> 53 </span><span class="Delimiter">}</span>
<span id="L54" class="LineNr"> 54 </span>
<span id="L55" class="LineNr"> 55 </span><span class="Delimiter">:(code)</span>
<span id="L56" class="LineNr"> 56 </span>string <a href='054static_dispatch.cc.html#L56'>matching_variant_name</a><span class="Delimiter">(</span><span class="Normal">const</span> recipe&amp; rr<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L57" class="LineNr"> 57 </span> <span class="Normal">const</span> vector&lt;recipe_ordinal&gt;&amp; variants = <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Recipe_variants<span class="Delimiter">,</span> rr<span class="Delimiter">.</span>name<span class="Delimiter">);</span>
<span id="L57" class="LineNr"> 57 </span> <span class="Normal">const</span> vector&lt;recipe_ordinal&gt;&amp; variants = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Recipe_variants<span class="Delimiter">,</span> rr<span class="Delimiter">.</span>name<span class="Delimiter">);</span>
<span id="L58" class="LineNr"> 58 </span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span> i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>variants<span class="Delimiter">);</span> ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L59" class="LineNr"> 59 </span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> variants<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
<span id="L60" class="LineNr"> 60 </span> <span class="Conceal">¦</span> <span class="Normal">const</span> recipe&amp; candidate = get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> variants<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">));</span>
@ -232,7 +232,7 @@ if ('onhashchange' in window) {
<span id="L166" class="LineNr">166 </span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> index = <span class="Constant">0</span><span class="Delimiter">;</span> index &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller_recipe<span class="Delimiter">.</span>steps<span class="Delimiter">);</span> ++index<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L167" class="LineNr">167 </span> <span class="Conceal">¦</span> instruction&amp; inst = caller_recipe<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>index<span class="Delimiter">);</span>
<span id="L168" class="LineNr">168 </span> <span class="Conceal">¦</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="L169" class="LineNr">169 </span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='054static_dispatch.cc.html#L366'>non_ghost_size</a><span class="Delimiter">(</span><a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Recipe_variants<span class="Delimiter">,</span> inst<span class="Delimiter">.</span>name<span class="Delimiter">))</span> == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
<span id="L169" class="LineNr">169 </span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='054static_dispatch.cc.html#L366'>non_ghost_size</a><span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Recipe_variants<span class="Delimiter">,</span> inst<span class="Delimiter">.</span>name<span class="Delimiter">))</span> == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
<span id="L170" class="LineNr">170 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9992</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;instruction &quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L171" class="LineNr">171 </span> <span class="Conceal">¦</span> Resolve_stack<span class="Delimiter">.</span>push_front<span class="Delimiter">(</span>call<span class="Delimiter">(</span>r<span class="Delimiter">));</span>
<span id="L172" class="LineNr">172 </span> <span class="Conceal">¦</span> Resolve_stack<span class="Delimiter">.</span>front<span class="Delimiter">().</span>running_step_index = index<span class="Delimiter">;</span>
@ -646,10 +646,10 @@ if ('onhashchange' in window) {
<span id="L580" class="LineNr">580 </span> ostringstream out<span class="Delimiter">;</span>
<span id="L581" class="LineNr">581 </span> out &lt;&lt; <span class="Constant">&quot;recipe &quot;</span> &lt;&lt; caller<span class="Delimiter">.</span>name<span class="Delimiter">;</span>
<span id="L582" class="LineNr">582 </span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span> i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span> ++i<span class="Delimiter">)</span>
<span id="L583" class="LineNr">583 </span> <span class="Conceal">¦</span> out &lt;&lt; <span class="Constant">' '</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">));</span>
<span id="L583" class="LineNr">583 </span> <span class="Conceal">¦</span> out &lt;&lt; <span class="Constant">' '</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">));</span>
<span id="L584" class="LineNr">584 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>!caller<span class="Delimiter">.</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> out &lt;&lt; <span class="Constant">&quot; -&gt;&quot;</span><span class="Delimiter">;</span>
<span id="L585" class="LineNr">585 </span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span> i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>products<span class="Delimiter">);</span> ++i<span class="Delimiter">)</span>
<span id="L586" class="LineNr">586 </span> <span class="Conceal">¦</span> out &lt;&lt; <span class="Constant">' '</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">));</span>
<span id="L586" class="LineNr">586 </span> <span class="Conceal">¦</span> out &lt;&lt; <span class="Constant">' '</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">));</span>
<span id="L587" class="LineNr">587 </span> <span class="Identifier">return</span> out<span class="Delimiter">.</span>str<span class="Delimiter">();</span>
<span id="L588" class="LineNr">588 </span><span class="Delimiter">}</span>
<span id="L589" class="LineNr">589 </span>

View File

@ -100,7 +100,7 @@ if ('onhashchange' in window) {
<span id="L34" class="LineNr"> 34 </span><span class="Normal">const</span> type_tree* get_base_type<span class="Delimiter">(</span><span class="Normal">const</span> type_tree* t<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L35" class="LineNr"> 35 </span> <span class="Normal">const</span> type_tree* result = t<span class="Delimiter">-&gt;</span>atom ? t : t<span class="Delimiter">-&gt;</span>left<span class="Delimiter">;</span>
<span id="L36" class="LineNr"> 36 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>!result<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span>
<span id="L37" class="LineNr"> 37 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;invalid type &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>t<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L37" class="LineNr"> 37 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;invalid type &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>t<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L38" class="LineNr"> 38 </span> <span class="Identifier">return</span> result<span class="Delimiter">;</span>
<span id="L39" class="LineNr"> 39 </span><span class="Delimiter">}</span>
<span id="L40" class="LineNr"> 40 </span>
@ -240,14 +240,14 @@ if ('onhashchange' in window) {
<span id="L174" class="LineNr">174 </span> <span class="Comment">// we haven't seen this container before</span>
<span id="L175" class="LineNr">175 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> name<span class="Delimiter">)</span> || get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> name<span class="Delimiter">)</span> == <span class="Constant">0</span><span class="Delimiter">)</span>
<span id="L176" class="LineNr">176 </span> <span class="Conceal">¦</span> <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> name<span class="Delimiter">,</span> Next_type_ordinal++<span class="Delimiter">);</span>
<span id="L177" class="LineNr">177 </span> type_info&amp; info = <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Type<span class="Delimiter">,</span> get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> name<span class="Delimiter">));</span>
<span id="L177" class="LineNr">177 </span> type_info&amp; info = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Type<span class="Delimiter">,</span> get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> name<span class="Delimiter">));</span>
<span id="L178" class="LineNr">178 </span> info<span class="Delimiter">.</span>type_ingredient_names<span class="Delimiter">.</span>swap<span class="Delimiter">(</span>type_ingredient_names<span class="Delimiter">);</span>
<span id="L179" class="LineNr">179 </span> <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
<span id="L180" class="LineNr">180 </span><span class="Delimiter">}</span>
<span id="L181" class="LineNr">181 </span>
<span id="L182" class="LineNr">182 </span><span class="Normal">bool</span> slurp_type_ingredients<span class="Delimiter">(</span>istream&amp; in<span class="Delimiter">,</span> map&lt;string<span class="Delimiter">,</span> type_ordinal&gt;&amp; out<span class="Delimiter">,</span> <span class="Normal">const</span> string&amp; container_name<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L183" class="LineNr">183 </span> <span class="Normal">int</span> next_type_ordinal = START_TYPE_INGREDIENTS<span class="Delimiter">;</span>
<span id="L184" class="LineNr">184 </span> <span class="Normal">while</span> <span class="Delimiter">(</span><a href='001help.cc.html#L238'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Delimiter">{</span>
<span id="L184" class="LineNr">184 </span> <span class="Normal">while</span> <span class="Delimiter">(</span><a href='001help.cc.html#L239'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Delimiter">{</span>
<span id="L185" class="LineNr">185 </span> <span class="Conceal">¦</span> string curr = slurp_until<span class="Delimiter">(</span>in<span class="Delimiter">,</span> <span class="Constant">':'</span><span class="Delimiter">);</span>
<span id="L186" class="LineNr">186 </span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>curr<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
<span id="L187" class="LineNr">187 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; container_name &lt;&lt; <span class="Constant">&quot;: empty type ingredients not permitted</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
@ -494,7 +494,7 @@ if ('onhashchange' in window) {
<span id="L428" class="LineNr">428 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Constant">&quot;]</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">);</span>
<span id="L429" class="LineNr">429 </span> reagent callsite<span class="Delimiter">(</span><span class="Constant">&quot;x:foo:point&quot;</span><span class="Delimiter">);</span>
<span id="L430" class="LineNr">430 </span> reagent element = <a href='030container.cc.html#L429'>element_type</a><span class="Delimiter">(</span>callsite<span class="Delimiter">.</span>type<span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">);</span>
<span id="L431" class="LineNr">431 </span> <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>element<span class="Delimiter">),</span> <span class="Constant">&quot;{x: </span><span class="cSpecial">\&quot;</span><span class="Constant">point</span><span class="cSpecial">\&quot;</span><span class="Constant">}&quot;</span><span class="Delimiter">);</span>
<span id="L431" class="LineNr">431 </span> <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>element<span class="Delimiter">),</span> <span class="Constant">&quot;{x: </span><span class="cSpecial">\&quot;</span><span class="Constant">point</span><span class="cSpecial">\&quot;</span><span class="Constant">}&quot;</span><span class="Delimiter">);</span>
<span id="L432" class="LineNr">432 </span><span class="Delimiter">}</span>
<span id="L433" class="LineNr">433 </span>
<span id="L434" class="LineNr">434 </span><span class="Normal">void</span> test_replace_type_ingredients_tail<span class="Delimiter">()</span> <span class="Delimiter">{</span>
@ -506,7 +506,7 @@ if ('onhashchange' in window) {
<span id="L440" class="LineNr">440 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Constant">&quot;]</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">);</span>
<span id="L441" class="LineNr">441 </span> reagent callsite<span class="Delimiter">(</span><span class="Constant">&quot;x:bar:point&quot;</span><span class="Delimiter">);</span>
<span id="L442" class="LineNr">442 </span> reagent element = <a href='030container.cc.html#L429'>element_type</a><span class="Delimiter">(</span>callsite<span class="Delimiter">.</span>type<span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">);</span>
<span id="L443" class="LineNr">443 </span> <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>element<span class="Delimiter">),</span> <span class="Constant">&quot;{x: (</span><span class="cSpecial">\&quot;</span><span class="Constant">foo</span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant">point</span><span class="cSpecial">\&quot;</span><span class="Constant">)}&quot;</span><span class="Delimiter">);</span>
<span id="L443" class="LineNr">443 </span> <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>element<span class="Delimiter">),</span> <span class="Constant">&quot;{x: (</span><span class="cSpecial">\&quot;</span><span class="Constant">foo</span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant">point</span><span class="cSpecial">\&quot;</span><span class="Constant">)}&quot;</span><span class="Delimiter">);</span>
<span id="L444" class="LineNr">444 </span><span class="Delimiter">}</span>
<span id="L445" class="LineNr">445 </span>
<span id="L446" class="LineNr">446 </span><span class="Normal">void</span> test_replace_type_ingredients_head_tail_multiple<span class="Delimiter">()</span> <span class="Delimiter">{</span>
@ -518,7 +518,7 @@ if ('onhashchange' in window) {
<span id="L452" class="LineNr">452 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Constant">&quot;]</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">);</span>
<span id="L453" class="LineNr">453 </span> reagent callsite<span class="Delimiter">(</span><span class="Constant">&quot;x:bar:<a href='043space.cc.html#L82'>address</a>:array:character&quot;</span><span class="Delimiter">);</span>
<span id="L454" class="LineNr">454 </span> reagent element = <a href='030container.cc.html#L429'>element_type</a><span class="Delimiter">(</span>callsite<span class="Delimiter">.</span>type<span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">);</span>
<span id="L455" class="LineNr">455 </span> <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>element<span class="Delimiter">),</span> <span class="Constant">&quot;{x: (</span><span class="cSpecial">\&quot;</span><span class="Constant">foo</span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant"><a href='043space.cc.html#L82'>address</a></span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant">array</span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant">character</span><span class="cSpecial">\&quot;</span><span class="Constant">)}&quot;</span><span class="Delimiter">);</span>
<span id="L455" class="LineNr">455 </span> <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>element<span class="Delimiter">),</span> <span class="Constant">&quot;{x: (</span><span class="cSpecial">\&quot;</span><span class="Constant">foo</span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant"><a href='043space.cc.html#L82'>address</a></span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant">array</span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant">character</span><span class="cSpecial">\&quot;</span><span class="Constant">)}&quot;</span><span class="Delimiter">);</span>
<span id="L456" class="LineNr">456 </span><span class="Delimiter">}</span>
<span id="L457" class="LineNr">457 </span>
<span id="L458" class="LineNr">458 </span><span class="Normal">void</span> test_replace_type_ingredients_head_middle<span class="Delimiter">()</span> <span class="Delimiter">{</span>
@ -530,7 +530,7 @@ if ('onhashchange' in window) {
<span id="L464" class="LineNr">464 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Constant">&quot;]</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">);</span>
<span id="L465" class="LineNr">465 </span> reagent callsite<span class="Delimiter">(</span><span class="Constant">&quot;x:bar:address&quot;</span><span class="Delimiter">);</span>
<span id="L466" class="LineNr">466 </span> reagent element = <a href='030container.cc.html#L429'>element_type</a><span class="Delimiter">(</span>callsite<span class="Delimiter">.</span>type<span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">);</span>
<span id="L467" class="LineNr">467 </span> <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>element<span class="Delimiter">),</span> <span class="Constant">&quot;{x: (</span><span class="cSpecial">\&quot;</span><span class="Constant">foo</span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant"><a href='043space.cc.html#L82'>address</a></span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant">number</span><span class="cSpecial">\&quot;</span><span class="Constant">)}&quot;</span><span class="Delimiter">);</span>
<span id="L467" class="LineNr">467 </span> <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>element<span class="Delimiter">),</span> <span class="Constant">&quot;{x: (</span><span class="cSpecial">\&quot;</span><span class="Constant">foo</span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant"><a href='043space.cc.html#L82'>address</a></span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant">number</span><span class="cSpecial">\&quot;</span><span class="Constant">)}&quot;</span><span class="Delimiter">);</span>
<span id="L468" class="LineNr">468 </span><span class="Delimiter">}</span>
<span id="L469" class="LineNr">469 </span>
<span id="L470" class="LineNr">470 </span><span class="Normal">void</span> test_replace_last_type_ingredient_with_multiple<span class="Delimiter">()</span> <span class="Delimiter">{</span>
@ -540,9 +540,9 @@ if ('onhashchange' in window) {
<span id="L474" class="LineNr">474 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Constant">&quot;]</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">);</span>
<span id="L475" class="LineNr">475 </span> reagent callsite<span class="Delimiter">(</span><span class="Constant">&quot;{f: (foo number (address array character))}&quot;</span><span class="Delimiter">);</span>
<span id="L476" class="LineNr">476 </span> reagent element1 = <a href='030container.cc.html#L429'>element_type</a><span class="Delimiter">(</span>callsite<span class="Delimiter">.</span>type<span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">);</span>
<span id="L477" class="LineNr">477 </span> <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>element1<span class="Delimiter">),</span> <span class="Constant">&quot;{x: </span><span class="cSpecial">\&quot;</span><span class="Constant">number</span><span class="cSpecial">\&quot;</span><span class="Constant">}&quot;</span><span class="Delimiter">);</span>
<span id="L477" class="LineNr">477 </span> <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>element1<span class="Delimiter">),</span> <span class="Constant">&quot;{x: </span><span class="cSpecial">\&quot;</span><span class="Constant">number</span><span class="cSpecial">\&quot;</span><span class="Constant">}&quot;</span><span class="Delimiter">);</span>
<span id="L478" class="LineNr">478 </span> reagent element2 = <a href='030container.cc.html#L429'>element_type</a><span class="Delimiter">(</span>callsite<span class="Delimiter">.</span>type<span class="Delimiter">,</span> <span class="Constant">1</span><span class="Delimiter">);</span>
<span id="L479" class="LineNr">479 </span> <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>element2<span class="Delimiter">),</span> <span class="Constant">&quot;{y: (</span><span class="cSpecial">\&quot;</span><span class="Constant"><a href='043space.cc.html#L82'>address</a></span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant">array</span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant">character</span><span class="cSpecial">\&quot;</span><span class="Constant">)}&quot;</span><span class="Delimiter">);</span>
<span id="L479" class="LineNr">479 </span> <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>element2<span class="Delimiter">),</span> <span class="Constant">&quot;{y: (</span><span class="cSpecial">\&quot;</span><span class="Constant"><a href='043space.cc.html#L82'>address</a></span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant">array</span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant">character</span><span class="cSpecial">\&quot;</span><span class="Constant">)}&quot;</span><span class="Delimiter">);</span>
<span id="L480" class="LineNr">480 </span><span class="Delimiter">}</span>
<span id="L481" class="LineNr">481 </span>
<span id="L482" class="LineNr">482 </span><span class="Normal">void</span> test_replace_last_type_ingredient_inside_compound<span class="Delimiter">()</span> <span class="Delimiter">{</span>
@ -562,11 +562,11 @@ if ('onhashchange' in window) {
<span id="L496" class="LineNr">496 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Constant">&quot;]</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">);</span>
<span id="L497" class="LineNr">497 </span> reagent callsite<span class="Delimiter">(</span><span class="Constant">&quot;{f: (foo number (address array character) boolean)}&quot;</span><span class="Delimiter">);</span>
<span id="L498" class="LineNr">498 </span> reagent element1 = <a href='030container.cc.html#L429'>element_type</a><span class="Delimiter">(</span>callsite<span class="Delimiter">.</span>type<span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">);</span>
<span id="L499" class="LineNr">499 </span> <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>element1<span class="Delimiter">),</span> <span class="Constant">&quot;{x: </span><span class="cSpecial">\&quot;</span><span class="Constant">number</span><span class="cSpecial">\&quot;</span><span class="Constant">}&quot;</span><span class="Delimiter">);</span>
<span id="L499" class="LineNr">499 </span> <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>element1<span class="Delimiter">),</span> <span class="Constant">&quot;{x: </span><span class="cSpecial">\&quot;</span><span class="Constant">number</span><span class="cSpecial">\&quot;</span><span class="Constant">}&quot;</span><span class="Delimiter">);</span>
<span id="L500" class="LineNr">500 </span> reagent element2 = <a href='030container.cc.html#L429'>element_type</a><span class="Delimiter">(</span>callsite<span class="Delimiter">.</span>type<span class="Delimiter">,</span> <span class="Constant">1</span><span class="Delimiter">);</span>
<span id="L501" class="LineNr">501 </span> <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>element2<span class="Delimiter">),</span> <span class="Constant">&quot;{y: (</span><span class="cSpecial">\&quot;</span><span class="Constant"><a href='043space.cc.html#L82'>address</a></span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant">array</span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant">character</span><span class="cSpecial">\&quot;</span><span class="Constant">)}&quot;</span><span class="Delimiter">);</span>
<span id="L501" class="LineNr">501 </span> <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>element2<span class="Delimiter">),</span> <span class="Constant">&quot;{y: (</span><span class="cSpecial">\&quot;</span><span class="Constant"><a href='043space.cc.html#L82'>address</a></span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant">array</span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant">character</span><span class="cSpecial">\&quot;</span><span class="Constant">)}&quot;</span><span class="Delimiter">);</span>
<span id="L502" class="LineNr">502 </span> reagent element3 = <a href='030container.cc.html#L429'>element_type</a><span class="Delimiter">(</span>callsite<span class="Delimiter">.</span>type<span class="Delimiter">,</span> <span class="Constant">2</span><span class="Delimiter">);</span>
<span id="L503" class="LineNr">503 </span> <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>element3<span class="Delimiter">),</span> <span class="Constant">&quot;{z: </span><span class="cSpecial">\&quot;</span><span class="Constant">boolean</span><span class="cSpecial">\&quot;</span><span class="Constant">}&quot;</span><span class="Delimiter">);</span>
<span id="L503" class="LineNr">503 </span> <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>element3<span class="Delimiter">),</span> <span class="Constant">&quot;{z: </span><span class="cSpecial">\&quot;</span><span class="Constant">boolean</span><span class="cSpecial">\&quot;</span><span class="Constant">}&quot;</span><span class="Delimiter">);</span>
<span id="L504" class="LineNr">504 </span><span class="Delimiter">}</span>
<span id="L505" class="LineNr">505 </span>
<span id="L506" class="LineNr">506 </span><span class="Normal">void</span> test_replace_middle_type_ingredient_with_multiple2<span class="Delimiter">()</span> <span class="Delimiter">{</span>
@ -576,7 +576,7 @@ if ('onhashchange' in window) {
<span id="L510" class="LineNr">510 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Constant">&quot;]</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">);</span>
<span id="L511" class="LineNr">511 </span> reagent callsite<span class="Delimiter">(</span><span class="Constant">&quot;{f: (foo (address array character) number)}&quot;</span><span class="Delimiter">);</span>
<span id="L512" class="LineNr">512 </span> reagent element = <a href='030container.cc.html#L429'>element_type</a><span class="Delimiter">(</span>callsite<span class="Delimiter">.</span>type<span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">);</span>
<span id="L513" class="LineNr">513 </span> <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>element<span class="Delimiter">),</span> <span class="Constant">&quot;{key: (</span><span class="cSpecial">\&quot;</span><span class="Constant"><a href='043space.cc.html#L82'>address</a></span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant">array</span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant">character</span><span class="cSpecial">\&quot;</span><span class="Constant">)}&quot;</span><span class="Delimiter">);</span>
<span id="L513" class="LineNr">513 </span> <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>element<span class="Delimiter">),</span> <span class="Constant">&quot;{key: (</span><span class="cSpecial">\&quot;</span><span class="Constant"><a href='043space.cc.html#L82'>address</a></span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant">array</span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant">character</span><span class="cSpecial">\&quot;</span><span class="Constant">)}&quot;</span><span class="Delimiter">);</span>
<span id="L514" class="LineNr">514 </span><span class="Delimiter">}</span>
<span id="L515" class="LineNr">515 </span>
<span id="L516" class="LineNr">516 </span><span class="Normal">void</span> test_replace_middle_type_ingredient_with_multiple3<span class="Delimiter">()</span> <span class="Delimiter">{</span>
@ -590,7 +590,7 @@ if ('onhashchange' in window) {
<span id="L524" class="LineNr">524 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Constant">&quot;]</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">);</span>
<span id="L525" class="LineNr">525 </span> reagent callsite<span class="Delimiter">(</span><span class="Constant">&quot;{f: (foo_table (address array character) number)}&quot;</span><span class="Delimiter">);</span>
<span id="L526" class="LineNr">526 </span> reagent element = <a href='030container.cc.html#L429'>element_type</a><span class="Delimiter">(</span>callsite<span class="Delimiter">.</span>type<span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">);</span>
<span id="L527" class="LineNr">527 </span> <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>element<span class="Delimiter">),</span> <span class="Constant">&quot;{data: (</span><span class="cSpecial">\&quot;</span><span class="Constant"><a href='043space.cc.html#L82'>address</a></span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant">array</span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant">foo_table_row</span><span class="cSpecial">\&quot;</span><span class="Constant"> (</span><span class="cSpecial">\&quot;</span><span class="Constant"><a href='043space.cc.html#L82'>address</a></span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant">array</span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant">character</span><span class="cSpecial">\&quot;</span><span class="Constant">) </span><span class="cSpecial">\&quot;</span><span class="Constant">number</span><span class="cSpecial">\&quot;</span><span class="Constant">)}&quot;</span><span class="Delimiter">);</span>
<span id="L527" class="LineNr">527 </span> <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>element<span class="Delimiter">),</span> <span class="Constant">&quot;{data: (</span><span class="cSpecial">\&quot;</span><span class="Constant"><a href='043space.cc.html#L82'>address</a></span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant">array</span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant">foo_table_row</span><span class="cSpecial">\&quot;</span><span class="Constant"> (</span><span class="cSpecial">\&quot;</span><span class="Constant"><a href='043space.cc.html#L82'>address</a></span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant">array</span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant">character</span><span class="cSpecial">\&quot;</span><span class="Constant">) </span><span class="cSpecial">\&quot;</span><span class="Constant">number</span><span class="cSpecial">\&quot;</span><span class="Constant">)}&quot;</span><span class="Delimiter">);</span>
<span id="L528" class="LineNr">528 </span><span class="Delimiter">}</span>
<span id="L529" class="LineNr">529 </span>
<span id="L530" class="LineNr">530 </span><span class="Delimiter">:(code)</span>

View File

@ -285,7 +285,7 @@ if ('onhashchange' in window) {
<span id="L218" class="LineNr"> 218 </span> <span class="Identifier">return</span> contains_type_ingredient_name<span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">)</span> || contains_type_ingredient_name<span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">);</span>
<span id="L219" class="LineNr"> 219 </span><span class="Delimiter">}</span>
<span id="L220" class="LineNr"> 220 </span>
<span id="L221" class="LineNr"> 221 </span><span class="Normal">int</span> number_of_concrete_type_names<span class="Delimiter">(</span><a href='001help.cc.html#L258'>unused</a> <span class="Normal">const</span> instruction&amp; inst<span class="Delimiter">,</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L221" class="LineNr"> 221 </span><span class="Normal">int</span> number_of_concrete_type_names<span class="Delimiter">(</span><a href='001help.cc.html#L259'>unused</a> <span class="Normal">const</span> instruction&amp; inst<span class="Delimiter">,</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L222" class="LineNr"> 222 </span> <span class="Normal">const</span> recipe&amp; caller = get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">);</span>
<span id="L223" class="LineNr"> 223 </span> <span class="Normal">int</span> result = <span class="Constant">0</span><span class="Delimiter">;</span>
<span id="L224" class="LineNr"> 224 </span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span> i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span> ++i<span class="Delimiter">)</span>
@ -303,7 +303,7 @@ if ('onhashchange' in window) {
<span id="L236" class="LineNr"> 236 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span>+ number_of_concrete_type_names<span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">);</span>
<span id="L237" class="LineNr"> 237 </span><span class="Delimiter">}</span>
<span id="L238" class="LineNr"> 238 </span>
<span id="L239" class="LineNr"> 239 </span><span class="Normal">int</span> number_of_type_ingredients<span class="Delimiter">(</span><a href='001help.cc.html#L258'>unused</a> <span class="Normal">const</span> instruction&amp; inst<span class="Delimiter">,</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L239" class="LineNr"> 239 </span><span class="Normal">int</span> number_of_type_ingredients<span class="Delimiter">(</span><a href='001help.cc.html#L259'>unused</a> <span class="Normal">const</span> instruction&amp; inst<span class="Delimiter">,</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L240" class="LineNr"> 240 </span> <span class="Normal">const</span> recipe&amp; caller = get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">);</span>
<span id="L241" class="LineNr"> 241 </span> <span class="Normal">int</span> result = <span class="Constant">0</span><span class="Delimiter">;</span>
<span id="L242" class="LineNr"> 242 </span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span> i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span> ++i<span class="Delimiter">)</span>
@ -368,7 +368,7 @@ if ('onhashchange' in window) {
<span id="L301" class="LineNr"> 301 </span> <span class="Conceal">¦</span> <a href='056shape_shifting_recipe.cc.html#L312'>save_or_deduce_type_name</a><span class="Delimiter">(</span>variant<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">),</span> type_names<span class="Delimiter">,</span> variant<span class="Delimiter">,</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">);</span>
<span id="L302" class="LineNr"> 302 </span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span> i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>variant<span class="Delimiter">.</span>steps<span class="Delimiter">);</span> ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L303" class="LineNr"> 303 </span> <span class="Conceal">¦</span> instruction&amp; inst = variant<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
<span id="L304" class="LineNr"> 304 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; <a href='010vm.cc.html#L32'>instruction</a>: &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L304" class="LineNr"> 304 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; <a href='010vm.cc.html#L32'>instruction</a>: &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L305" class="LineNr"> 305 </span> <span class="Conceal">¦</span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> in = <span class="Constant">0</span><span class="Delimiter">;</span> in &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span> ++in<span class="Delimiter">)</span>
<span id="L306" class="LineNr"> 306 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='056shape_shifting_recipe.cc.html#L312'>save_or_deduce_type_name</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>in<span class="Delimiter">),</span> type_names<span class="Delimiter">,</span> variant<span class="Delimiter">,</span> <span class="Constant">&quot; in '&quot;</span> + to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> + <span class="Constant">&quot;'&quot;</span><span class="Delimiter">);</span>
<span id="L307" class="LineNr"> 307 </span> <span class="Conceal">¦</span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> out = <span class="Constant">0</span><span class="Delimiter">;</span> out &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">);</span> ++out<span class="Delimiter">)</span>
@ -377,7 +377,7 @@ if ('onhashchange' in window) {
<span id="L310" class="LineNr"> 310 </span><span class="Delimiter">}</span>
<span id="L311" class="LineNr"> 311 </span>
<span id="L312" class="LineNr"> 312 </span><span class="Normal">void</span> <a href='056shape_shifting_recipe.cc.html#L312'>save_or_deduce_type_name</a><span class="Delimiter">(</span>reagent&amp; x<span class="Delimiter">,</span> map&lt;string<span class="Delimiter">,</span> type_tree*&gt;&amp; type<span class="Delimiter">,</span> <span class="Normal">const</span> recipe&amp; variant<span class="Delimiter">,</span> <span class="Normal">const</span> string&amp; context<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L313" class="LineNr"> 313 </span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9994</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; checking &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>x<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;: &quot;</span> &lt;&lt; names_to_string<span class="Delimiter">(</span>x<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L313" class="LineNr"> 313 </span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9994</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; checking &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>x<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;: &quot;</span> &lt;&lt; names_to_string<span class="Delimiter">(</span>x<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L314" class="LineNr"> 314 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>!x<span class="Delimiter">.</span>type &amp;&amp; contains_key<span class="Delimiter">(</span>type<span class="Delimiter">,</span> x<span class="Delimiter">.</span>name<span class="Delimiter">))</span> <span class="Delimiter">{</span>
<span id="L315" class="LineNr"> 315 </span> <span class="Conceal">¦</span> x<span class="Delimiter">.</span>type = <span class="Normal">new</span> type_tree<span class="Delimiter">(</span>*get<span class="Delimiter">(</span>type<span class="Delimiter">,</span> x<span class="Delimiter">.</span>name<span class="Delimiter">));</span>
<span id="L316" class="LineNr"> 316 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9994</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; deducing type to &quot;</span> &lt;&lt; names_to_string<span class="Delimiter">(</span>x<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
@ -440,7 +440,7 @@ if ('onhashchange' in window) {
<span id="L373" class="LineNr"> 373 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> curr_refinement_type = <span class="Normal">new</span> type_tree<span class="Delimiter">(</span>*refinement_type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">);</span>
<span id="L374" class="LineNr"> 374 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>
<span id="L375" class="LineNr"> 375 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span>mappings<span class="Delimiter">,</span> exemplar_type<span class="Delimiter">-&gt;</span>name<span class="Delimiter">))</span> <span class="Delimiter">{</span>
<span id="L376" class="LineNr"> 376 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;adding mapping from &quot;</span> &lt;&lt; exemplar_type<span class="Delimiter">-&gt;</span>name &lt;&lt; <span class="Constant">&quot; to &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>curr_refinement_type<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L376" class="LineNr"> 376 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;adding mapping from &quot;</span> &lt;&lt; exemplar_type<span class="Delimiter">-&gt;</span>name &lt;&lt; <span class="Constant">&quot; to &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>curr_refinement_type<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L377" class="LineNr"> 377 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>mappings<span class="Delimiter">,</span> exemplar_type<span class="Delimiter">-&gt;</span>name<span class="Delimiter">,</span> <span class="Normal">new</span> type_tree<span class="Delimiter">(</span>*curr_refinement_type<span class="Delimiter">));</span>
<span id="L378" class="LineNr"> 378 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>
<span id="L379" class="LineNr"> 379 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">else</span> <span class="Delimiter">{</span>
@ -492,7 +492,7 @@ if ('onhashchange' in window) {
<span id="L425" class="LineNr"> 425 </span><span class="Delimiter">}</span>
<span id="L426" class="LineNr"> 426 </span>
<span id="L427" class="LineNr"> 427 </span><span class="Normal">void</span> replace_type_ingredients<span class="Delimiter">(</span>reagent&amp; x<span class="Delimiter">,</span> <span class="Normal">const</span> map&lt;string<span class="Delimiter">,</span> <span class="Normal">const</span> type_tree*&gt;&amp; mappings<span class="Delimiter">,</span> <span class="Normal">const</span> recipe&amp; caller<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L428" class="LineNr"> 428 </span> string before = <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>x<span class="Delimiter">);</span>
<span id="L428" class="LineNr"> 428 </span> string before = <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>x<span class="Delimiter">);</span>
<span id="L429" class="LineNr"> 429 </span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;replacing in ingredient &quot;</span> &lt;&lt; x<span class="Delimiter">.</span>original_string &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L430" class="LineNr"> 430 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>!x<span class="Delimiter">.</span>type<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L431" class="LineNr"> 431 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;specializing &quot;</span> &lt;&lt; caller<span class="Delimiter">.</span>original_name &lt;&lt; <span class="Constant">&quot;: missing type for '&quot;</span> &lt;&lt; x<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>

View File

@ -67,14 +67,14 @@ if ('onhashchange' in window) {
<span id="L8" class="LineNr"> 8 </span><span class="Comment"># define it to be identical to 'to-text' by default</span>
<span id="L9" class="LineNr"> 9 </span><span class="muRecipe">def</span> to-text-line x:_elem<span class="muRecipe"> -&gt; </span>y:text [
<span id="L10" class="LineNr">10 </span> <span class="Constant">local-scope</span>
<span id="L11" class="LineNr">11 </span> <span class="Constant">load-ingredients</span>
<span id="L11" class="LineNr">11 </span> <span class="Constant">load-inputs</span>
<span id="L12" class="LineNr">12 </span> y <span class="Special">&lt;-</span> to-text x
<span id="L13" class="LineNr">13 </span>]
<span id="L14" class="LineNr">14 </span>
<span id="L15" class="LineNr">15 </span><span class="Comment"># variant for arrays (since we can't pass them around otherwise)</span>
<span id="L16" class="LineNr">16 </span><span class="muRecipe">def</span> <a href='059to_text.mu.html#L16'>array-to-text-line</a> x:&amp;:@:_elem<span class="muRecipe"> -&gt; </span>y:text [
<span id="L17" class="LineNr">17 </span> <span class="Constant">local-scope</span>
<span id="L18" class="LineNr">18 </span> <span class="Constant">load-ingredients</span>
<span id="L18" class="LineNr">18 </span> <span class="Constant">load-inputs</span>
<span id="L19" class="LineNr">19 </span> y <span class="Special">&lt;-</span> to-text *x
<span id="L20" class="LineNr">20 </span>]
<span id="L21" class="LineNr">21 </span>
@ -92,7 +92,7 @@ if ('onhashchange' in window) {
<span id="L33" class="LineNr">33 </span><span class="Comment"># finally, a specialization for single characters</span>
<span id="L34" class="LineNr">34 </span><span class="muRecipe">def</span> to-text c:char<span class="muRecipe"> -&gt; </span>y:text [
<span id="L35" class="LineNr">35 </span> <span class="Constant">local-scope</span>
<span id="L36" class="LineNr">36 </span> <span class="Constant">load-ingredients</span>
<span id="L36" class="LineNr">36 </span> <span class="Constant">load-inputs</span>
<span id="L37" class="LineNr">37 </span> y <span class="Special">&lt;-</span> new <span class="Constant">character:type</span>, <span class="Constant">1/capacity</span>
<span id="L38" class="LineNr">38 </span> *y <span class="Special">&lt;-</span> put-index *y,<span class="Constant"> 0</span>, c
<span id="L39" class="LineNr">39 </span>]

View File

@ -64,7 +64,7 @@ if ('onhashchange' in window) {
<span id="L2" class="LineNr"> 2 </span>
<span id="L3" class="LineNr"> 3 </span><span class="muRecipe">def</span> equal a:text, b:text<span class="muRecipe"> -&gt; </span>result:bool [
<span id="L4" class="LineNr"> 4 </span> <span class="Constant">local-scope</span>
<span id="L5" class="LineNr"> 5 </span> <span class="Constant">load-ingredients</span>
<span id="L5" class="LineNr"> 5 </span> <span class="Constant">load-inputs</span>
<span id="L6" class="LineNr"> 6 </span> an:num, bn:num <span class="Special">&lt;-</span> copy a, b
<span id="L7" class="LineNr"> 7 </span> address-equal?:boolean <span class="Special">&lt;-</span> equal an, bn
<span id="L8" class="LineNr"> 8 </span> <span class="muControl">return-if</span> address-equal?, <span class="Constant">1/true</span>
@ -186,7 +186,7 @@ if ('onhashchange' in window) {
<span id="L124" class="LineNr"> 124 </span>
<span id="L125" class="LineNr"> 125 </span><span class="muRecipe">def</span> <a href='061text.mu.html#L125'>new-buffer</a> <a href='075channel.mu.html#L399'>capacity</a>:num<span class="muRecipe"> -&gt; </span>result:&amp;:<a href='061text.mu.html#L120'>buffer</a>:_elem [
<span id="L126" class="LineNr"> 126 </span> <span class="Constant">local-scope</span>
<span id="L127" class="LineNr"> 127 </span> <span class="Constant">load-ingredients</span>
<span id="L127" class="LineNr"> 127 </span> <span class="Constant">load-inputs</span>
<span id="L128" class="LineNr"> 128 </span> result <span class="Special">&lt;-</span> new <span class="Delimiter">{</span>(buffer _elem): type<span class="Delimiter">}</span>
<span id="L129" class="LineNr"> 129 </span> *result <span class="Special">&lt;-</span> put *result, <span class="Constant">length:offset</span>,<span class="Constant"> 0</span>
<span id="L130" class="LineNr"> 130 </span> <span class="Delimiter">{</span>
@ -201,7 +201,7 @@ if ('onhashchange' in window) {
<span id="L139" class="LineNr"> 139 </span>
<span id="L140" class="LineNr"> 140 </span><span class="muRecipe">def</span> <a href='061text.mu.html#L140'>grow-buffer</a> buf:&amp;:<a href='061text.mu.html#L120'>buffer</a>:_elem<span class="muRecipe"> -&gt; </span>buf:&amp;:<a href='061text.mu.html#L120'>buffer</a>:_elem [
<span id="L141" class="LineNr"> 141 </span> <span class="Constant">local-scope</span>
<span id="L142" class="LineNr"> 142 </span> <span class="Constant">load-ingredients</span>
<span id="L142" class="LineNr"> 142 </span> <span class="Constant">load-inputs</span>
<span id="L143" class="LineNr"> 143 </span> <span class="Comment"># double buffer size</span>
<span id="L144" class="LineNr"> 144 </span> olddata:&amp;:@:_elem <span class="Special">&lt;-</span> get *buf, <span class="Constant">data:offset</span>
<span id="L145" class="LineNr"> 145 </span> oldlen:num <span class="Special">&lt;-</span> length *olddata
@ -222,7 +222,7 @@ if ('onhashchange' in window) {
<span id="L160" class="LineNr"> 160 </span>
<span id="L161" class="LineNr"> 161 </span><span class="muRecipe">def</span> <a href='061text.mu.html#L161'>buffer-full?</a> in:&amp;:<a href='061text.mu.html#L120'>buffer</a>:_elem<span class="muRecipe"> -&gt; </span>result:bool [
<span id="L162" class="LineNr"> 162 </span> <span class="Constant">local-scope</span>
<span id="L163" class="LineNr"> 163 </span> <span class="Constant">load-ingredients</span>
<span id="L163" class="LineNr"> 163 </span> <span class="Constant">load-inputs</span>
<span id="L164" class="LineNr"> 164 </span> len:num <span class="Special">&lt;-</span> get *in, <span class="Constant">length:offset</span>
<span id="L165" class="LineNr"> 165 </span> s:&amp;:@:_elem <span class="Special">&lt;-</span> get *in, <span class="Constant">data:offset</span>
<span id="L166" class="LineNr"> 166 </span> <a href='075channel.mu.html#L399'>capacity</a>:num <span class="Special">&lt;-</span> length *s
@ -232,7 +232,7 @@ if ('onhashchange' in window) {
<span id="L170" class="LineNr"> 170 </span><span class="Comment"># most broadly applicable definition of append to a buffer</span>
<span id="L171" class="LineNr"> 171 </span><span class="muRecipe">def</span> append buf:&amp;:<a href='061text.mu.html#L120'>buffer</a>:_elem, x:_elem<span class="muRecipe"> -&gt; </span>buf:&amp;:<a href='061text.mu.html#L120'>buffer</a>:_elem [
<span id="L172" class="LineNr"> 172 </span> <span class="Constant">local-scope</span>
<span id="L173" class="LineNr"> 173 </span> <span class="Constant">load-ingredients</span>
<span id="L173" class="LineNr"> 173 </span> <span class="Constant">load-inputs</span>
<span id="L174" class="LineNr"> 174 </span> len:num <span class="Special">&lt;-</span> get *buf, <span class="Constant">length:offset</span>
<span id="L175" class="LineNr"> 175 </span> <span class="Delimiter">{</span>
<span id="L176" class="LineNr"> 176 </span> <span class="Conceal">¦</span> <span class="Comment"># grow buffer if necessary</span>
@ -250,7 +250,7 @@ if ('onhashchange' in window) {
<span id="L188" class="LineNr"> 188 </span><span class="Comment"># call to-text</span>
<span id="L189" class="LineNr"> 189 </span><span class="muRecipe">def</span> append buf:&amp;:<a href='061text.mu.html#L120'>buffer</a>:char, x:_elem<span class="muRecipe"> -&gt; </span>buf:&amp;:<a href='061text.mu.html#L120'>buffer</a>:char [
<span id="L190" class="LineNr"> 190 </span> <span class="Constant">local-scope</span>
<span id="L191" class="LineNr"> 191 </span> <span class="Constant">load-ingredients</span>
<span id="L191" class="LineNr"> 191 </span> <span class="Constant">load-inputs</span>
<span id="L192" class="LineNr"> 192 </span> text:text <span class="Special">&lt;-</span> to-text x
<span id="L193" class="LineNr"> 193 </span> buf <span class="Special">&lt;-</span> append buf, text
<span id="L194" class="LineNr"> 194 </span>]
@ -258,7 +258,7 @@ if ('onhashchange' in window) {
<span id="L196" class="LineNr"> 196 </span><span class="Comment"># specialization for characters that is backspace-aware</span>
<span id="L197" class="LineNr"> 197 </span><span class="muRecipe">def</span> append buf:&amp;:<a href='061text.mu.html#L120'>buffer</a>:char, c:char<span class="muRecipe"> -&gt; </span>buf:&amp;:<a href='061text.mu.html#L120'>buffer</a>:char [
<span id="L198" class="LineNr"> 198 </span> <span class="Constant">local-scope</span>
<span id="L199" class="LineNr"> 199 </span> <span class="Constant">load-ingredients</span>
<span id="L199" class="LineNr"> 199 </span> <span class="Constant">load-inputs</span>
<span id="L200" class="LineNr"> 200 </span> len:num <span class="Special">&lt;-</span> get *buf, <span class="Constant">length:offset</span>
<span id="L201" class="LineNr"> 201 </span> <span class="Delimiter">{</span>
<span id="L202" class="LineNr"> 202 </span> <span class="Conceal">¦</span> <span class="Comment"># backspace? just drop last character if it exists and return</span>
@ -284,7 +284,7 @@ if ('onhashchange' in window) {
<span id="L222" class="LineNr"> 222 </span>
<span id="L223" class="LineNr"> 223 </span><span class="muRecipe">def</span> append buf:&amp;:<a href='061text.mu.html#L120'>buffer</a>:_elem, t:&amp;:@:_elem<span class="muRecipe"> -&gt; </span>buf:&amp;:<a href='061text.mu.html#L120'>buffer</a>:_elem [
<span id="L224" class="LineNr"> 224 </span> <span class="Constant">local-scope</span>
<span id="L225" class="LineNr"> 225 </span> <span class="Constant">load-ingredients</span>
<span id="L225" class="LineNr"> 225 </span> <span class="Constant">load-inputs</span>
<span id="L226" class="LineNr"> 226 </span> len:num <span class="Special">&lt;-</span> length *t
<span id="L227" class="LineNr"> 227 </span> i:num <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
<span id="L228" class="LineNr"> 228 </span> <span class="Delimiter">{</span>
@ -399,7 +399,7 @@ if ('onhashchange' in window) {
<span id="L337" class="LineNr"> 337 </span>
<span id="L338" class="LineNr"> 338 </span><span class="muRecipe">def</span> <a href='061text.mu.html#L338'>buffer-to-array</a> in:&amp;:<a href='061text.mu.html#L120'>buffer</a>:_elem<span class="muRecipe"> -&gt; </span>result:&amp;:@:_elem [
<span id="L339" class="LineNr"> 339 </span> <span class="Constant">local-scope</span>
<span id="L340" class="LineNr"> 340 </span> <span class="Constant">load-ingredients</span>
<span id="L340" class="LineNr"> 340 </span> <span class="Constant">load-inputs</span>
<span id="L341" class="LineNr"> 341 </span> <span class="Comment"># propagate null buffer</span>
<span id="L342" class="LineNr"> 342 </span> <span class="muControl">return-unless</span> in,<span class="Constant"> 0</span>
<span id="L343" class="LineNr"> 343 </span> len:num <span class="Special">&lt;-</span> get *in, <span class="Constant">length:offset</span>
@ -419,7 +419,7 @@ if ('onhashchange' in window) {
<span id="L357" class="LineNr"> 357 </span>
<span id="L358" class="LineNr"> 358 </span><span class="muRecipe">def</span> <a href='061text.mu.html#L358'>blank?</a> x:&amp;:@:_elem<span class="muRecipe"> -&gt; </span>result:bool [
<span id="L359" class="LineNr"> 359 </span> <span class="Constant">local-scope</span>
<span id="L360" class="LineNr"> 360 </span> <span class="Constant">load-ingredients</span>
<span id="L360" class="LineNr"> 360 </span> <span class="Constant">load-inputs</span>
<span id="L361" class="LineNr"> 361 </span> <span class="muControl">return-unless</span> x, <span class="Constant">1/true</span>
<span id="L362" class="LineNr"> 362 </span> len:num <span class="Special">&lt;-</span> length *x
<span id="L363" class="LineNr"> 363 </span> result <span class="Special">&lt;-</span> equal len,<span class="Constant"> 0</span>
@ -435,16 +435,16 @@ if ('onhashchange' in window) {
<span id="L373" class="LineNr"> 373 </span><span class="Comment"># will never ever get used.</span>
<span id="L374" class="LineNr"> 374 </span><span class="muRecipe">def</span> append first:text<span class="muRecipe"> -&gt; </span>result:text [
<span id="L375" class="LineNr"> 375 </span> <span class="Constant">local-scope</span>
<span id="L376" class="LineNr"> 376 </span> <span class="Constant">load-ingredients</span>
<span id="L376" class="LineNr"> 376 </span> <span class="Constant">load-inputs</span>
<span id="L377" class="LineNr"> 377 </span> buf:&amp;:<a href='061text.mu.html#L120'>buffer</a>:char <span class="Special">&lt;-</span> <a href='061text.mu.html#L125'>new-buffer</a><span class="Constant"> 30</span>
<span id="L378" class="LineNr"> 378 </span> <span class="Comment"># append first ingredient</span>
<span id="L378" class="LineNr"> 378 </span> <span class="Comment"># append first input</span>
<span id="L379" class="LineNr"> 379 </span> <span class="Delimiter">{</span>
<span id="L380" class="LineNr"> 380 </span> <span class="Conceal">¦</span> <span class="muControl">break-unless</span> first
<span id="L381" class="LineNr"> 381 </span> <span class="Conceal">¦</span> buf <span class="Special">&lt;-</span> append buf, first
<span id="L382" class="LineNr"> 382 </span> <span class="Delimiter">}</span>
<span id="L383" class="LineNr"> 383 </span> <span class="Comment"># append remaining ingredients</span>
<span id="L383" class="LineNr"> 383 </span> <span class="Comment"># append remaining inputs</span>
<span id="L384" class="LineNr"> 384 </span> <span class="Delimiter">{</span>
<span id="L385" class="LineNr"> 385 </span> <span class="Conceal">¦</span> arg:text, arg-found?:bool <span class="Special">&lt;-</span> <span class="Constant">next-ingredient</span>
<span id="L385" class="LineNr"> 385 </span> <span class="Conceal">¦</span> arg:text, arg-found?:bool <span class="Special">&lt;-</span> <span class="Constant">next-input</span>
<span id="L386" class="LineNr"> 386 </span> <span class="Conceal">¦</span> <span class="muControl">break-unless</span> arg-found?
<span id="L387" class="LineNr"> 387 </span> <span class="Conceal">¦</span> <span class="muControl">loop-unless</span> arg
<span id="L388" class="LineNr"> 388 </span> <span class="Conceal">¦</span> buf <span class="Special">&lt;-</span> append buf, arg
@ -520,7 +520,7 @@ if ('onhashchange' in window) {
<span id="L458" class="LineNr"> 458 </span>
<span id="L459" class="LineNr"> 459 </span><span class="muRecipe">def</span> <a href='061text.mu.html#L459'>replace</a> s:text, oldc:char, newc:char, from:num/optional<span class="muRecipe"> -&gt; </span>s:text [
<span id="L460" class="LineNr"> 460 </span> <span class="Constant">local-scope</span>
<span id="L461" class="LineNr"> 461 </span> <span class="Constant">load-ingredients</span>
<span id="L461" class="LineNr"> 461 </span> <span class="Constant">load-inputs</span>
<span id="L462" class="LineNr"> 462 </span> len:num <span class="Special">&lt;-</span> length *s
<span id="L463" class="LineNr"> 463 </span> i:num <span class="Special">&lt;-</span> find-next s, oldc, from
<span id="L464" class="LineNr"> 464 </span> done?:bool <span class="Special">&lt;-</span> greater-or-equal i, len
@ -581,13 +581,13 @@ if ('onhashchange' in window) {
<span id="L519" class="LineNr"> 519 </span><span class="Comment"># replace underscores in first with remaining args</span>
<span id="L520" class="LineNr"> 520 </span><span class="muRecipe">def</span> <a href='061text.mu.html#L520'>interpolate</a> template:text<span class="muRecipe"> -&gt; </span>result:text [
<span id="L521" class="LineNr"> 521 </span> <span class="Constant">local-scope</span>
<span id="L522" class="LineNr"> 522 </span> <span class="Constant">load-ingredients</span> <span class="Comment"># consume just the template</span>
<span id="L522" class="LineNr"> 522 </span> <span class="Constant">load-inputs</span> <span class="Comment"># consume just the template</span>
<span id="L523" class="LineNr"> 523 </span> <span class="Comment"># compute result-len, space to allocate for result</span>
<span id="L524" class="LineNr"> 524 </span> tem-len:num <span class="Special">&lt;-</span> length *template
<span id="L525" class="LineNr"> 525 </span> result-len:num <span class="Special">&lt;-</span> copy tem-len
<span id="L526" class="LineNr"> 526 </span> <span class="Delimiter">{</span>
<span id="L527" class="LineNr"> 527 </span> <span class="Conceal">¦</span> <span class="Comment"># while ingredients remain</span>
<span id="L528" class="LineNr"> 528 </span> <span class="Conceal">¦</span> a:text, arg-received?:bool <span class="Special">&lt;-</span> <span class="Constant">next-ingredient</span>
<span id="L527" class="LineNr"> 527 </span> <span class="Conceal">¦</span> <span class="Comment"># while inputs remain</span>
<span id="L528" class="LineNr"> 528 </span> <span class="Conceal">¦</span> a:text, arg-received?:bool <span class="Special">&lt;-</span> <span class="Constant">next-input</span>
<span id="L529" class="LineNr"> 529 </span> <span class="Conceal">¦</span> <span class="muControl">break-unless</span> arg-received?
<span id="L530" class="LineNr"> 530 </span> <span class="Conceal">¦</span> <span class="Comment"># result-len = result-len + arg.length - 1 (for the 'underscore' being replaced)</span>
<span id="L531" class="LineNr"> 531 </span> <span class="Conceal">¦</span> a-len:num <span class="Special">&lt;-</span> length *a
@ -595,15 +595,15 @@ if ('onhashchange' in window) {
<span id="L533" class="LineNr"> 533 </span> <span class="Conceal">¦</span> result-len <span class="Special">&lt;-</span> subtract result-len,<span class="Constant"> 1</span>
<span id="L534" class="LineNr"> 534 </span> <span class="Conceal">¦</span> <span class="muControl">loop</span>
<span id="L535" class="LineNr"> 535 </span> <span class="Delimiter">}</span>
<span id="L536" class="LineNr"> 536 </span> <span class="Constant">rewind-ingredients</span>
<span id="L537" class="LineNr"> 537 </span> _ <span class="Special">&lt;-</span> <span class="Constant">next-ingredient</span> <span class="Comment"># skip template</span>
<span id="L536" class="LineNr"> 536 </span> <span class="Constant">rewind-inputs</span>
<span id="L537" class="LineNr"> 537 </span> _ <span class="Special">&lt;-</span> <span class="Constant">next-input</span> <span class="Comment"># skip template</span>
<span id="L538" class="LineNr"> 538 </span> result <span class="Special">&lt;-</span> new <span class="Constant">character:type</span>, result-len
<span id="L539" class="LineNr"> 539 </span> <span class="Comment"># repeatedly copy sections of template and 'holes' into result</span>
<span id="L540" class="LineNr"> 540 </span> result-idx:num <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
<span id="L541" class="LineNr"> 541 </span> i:num <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
<span id="L542" class="LineNr"> 542 </span> <span class="Delimiter">{</span>
<span id="L543" class="LineNr"> 543 </span> <span class="Conceal">¦</span> <span class="Comment"># while arg received</span>
<span id="L544" class="LineNr"> 544 </span> <span class="Conceal">¦</span> a:text, arg-received?:bool <span class="Special">&lt;-</span> <span class="Constant">next-ingredient</span>
<span id="L544" class="LineNr"> 544 </span> <span class="Conceal">¦</span> a:text, arg-received?:bool <span class="Special">&lt;-</span> <span class="Constant">next-input</span>
<span id="L545" class="LineNr"> 545 </span> <span class="Conceal">¦</span> <span class="muControl">break-unless</span> arg-received?
<span id="L546" class="LineNr"> 546 </span> <span class="Conceal">¦</span> <span class="Comment"># copy template into result until '_'</span>
<span id="L547" class="LineNr"> 547 </span> <span class="Conceal">¦</span> <span class="Delimiter">{</span>
@ -695,7 +695,7 @@ if ('onhashchange' in window) {
<span id="L633" class="LineNr"> 633 </span><span class="Comment"># result:bool &lt;- space? c:char</span>
<span id="L634" class="LineNr"> 634 </span><span class="muRecipe">def</span> <a href='061text.mu.html#L634'>space?</a> c:char<span class="muRecipe"> -&gt; </span>result:bool [
<span id="L635" class="LineNr"> 635 </span> <span class="Constant">local-scope</span>
<span id="L636" class="LineNr"> 636 </span> <span class="Constant">load-ingredients</span>
<span id="L636" class="LineNr"> 636 </span> <span class="Constant">load-inputs</span>
<span id="L637" class="LineNr"> 637 </span> <span class="Comment"># most common case first</span>
<span id="L638" class="LineNr"> 638 </span> result <span class="Special">&lt;-</span> equal c, <span class="Constant">32/space</span>
<span id="L639" class="LineNr"> 639 </span> <span class="muControl">return-if</span> result
@ -756,7 +756,7 @@ if ('onhashchange' in window) {
<span id="L694" class="LineNr"> 694 </span>
<span id="L695" class="LineNr"> 695 </span><span class="muRecipe">def</span> <a href='061text.mu.html#L695'>trim</a> s:text<span class="muRecipe"> -&gt; </span>result:text [
<span id="L696" class="LineNr"> 696 </span> <span class="Constant">local-scope</span>
<span id="L697" class="LineNr"> 697 </span> <span class="Constant">load-ingredients</span>
<span id="L697" class="LineNr"> 697 </span> <span class="Constant">load-inputs</span>
<span id="L698" class="LineNr"> 698 </span> len:num <span class="Special">&lt;-</span> length *s
<span id="L699" class="LineNr"> 699 </span> <span class="Comment"># left trim: compute start</span>
<span id="L700" class="LineNr"> 700 </span> start:num <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
@ -866,7 +866,7 @@ if ('onhashchange' in window) {
<span id="L804" class="LineNr"> 804 </span>
<span id="L805" class="LineNr"> 805 </span><span class="muRecipe">def</span> find-next text:text, pattern:char, idx:num<span class="muRecipe"> -&gt; </span>next-index:num [
<span id="L806" class="LineNr"> 806 </span> <span class="Constant">local-scope</span>
<span id="L807" class="LineNr"> 807 </span> <span class="Constant">load-ingredients</span>
<span id="L807" class="LineNr"> 807 </span> <span class="Constant">load-inputs</span>
<span id="L808" class="LineNr"> 808 </span> len:num <span class="Special">&lt;-</span> length *text
<span id="L809" class="LineNr"> 809 </span> <span class="Delimiter">{</span>
<span id="L810" class="LineNr"> 810 </span> <span class="Conceal">¦</span> eof?:bool <span class="Special">&lt;-</span> greater-or-equal idx, len
@ -972,7 +972,7 @@ if ('onhashchange' in window) {
<span id="L910" class="LineNr"> 910 </span><span class="Comment"># fairly dumb algorithm</span>
<span id="L911" class="LineNr"> 911 </span><span class="muRecipe">def</span> find-next text:text, pattern:text, idx:num<span class="muRecipe"> -&gt; </span>next-index:num [
<span id="L912" class="LineNr"> 912 </span> <span class="Constant">local-scope</span>
<span id="L913" class="LineNr"> 913 </span> <span class="Constant">load-ingredients</span>
<span id="L913" class="LineNr"> 913 </span> <span class="Constant">load-inputs</span>
<span id="L914" class="LineNr"> 914 </span> first:char <span class="Special">&lt;-</span> index *pattern,<span class="Constant"> 0</span>
<span id="L915" class="LineNr"> 915 </span> <span class="Comment"># repeatedly check for match at current idx</span>
<span id="L916" class="LineNr"> 916 </span> len:num <span class="Special">&lt;-</span> length *text
@ -1053,7 +1053,7 @@ if ('onhashchange' in window) {
<span id="L991" class="LineNr"> 991 </span><span class="Comment"># checks if pattern matches at index 'idx'</span>
<span id="L992" class="LineNr"> 992 </span><span class="muRecipe">def</span> <a href='061text.mu.html#L992'>match-at</a> text:text, pattern:text, idx:num<span class="muRecipe"> -&gt; </span>result:bool [
<span id="L993" class="LineNr"> 993 </span> <span class="Constant">local-scope</span>
<span id="L994" class="LineNr"> 994 </span> <span class="Constant">load-ingredients</span>
<span id="L994" class="LineNr"> 994 </span> <span class="Constant">load-inputs</span>
<span id="L995" class="LineNr"> 995 </span> pattern-len:num <span class="Special">&lt;-</span> length *pattern
<span id="L996" class="LineNr"> 996 </span> <span class="Comment"># check that there's space left for the pattern</span>
<span id="L997" class="LineNr"> 997 </span> x:num <span class="Special">&lt;-</span> length *text
@ -1184,7 +1184,7 @@ if ('onhashchange' in window) {
<span id="L1122" class="LineNr">1122 </span>
<span id="L1123" class="LineNr">1123 </span><span class="muRecipe">def</span> <a href='061text.mu.html#L1123'>split</a> s:text, delim:char<span class="muRecipe"> -&gt; </span>result:&amp;:@:text [
<span id="L1124" class="LineNr">1124 </span> <span class="Constant">local-scope</span>
<span id="L1125" class="LineNr">1125 </span> <span class="Constant">load-ingredients</span>
<span id="L1125" class="LineNr">1125 </span> <span class="Constant">load-inputs</span>
<span id="L1126" class="LineNr">1126 </span> <span class="Comment"># empty text? return empty array</span>
<span id="L1127" class="LineNr">1127 </span> len:num <span class="Special">&lt;-</span> length *s
<span id="L1128" class="LineNr">1128 </span> <span class="Delimiter">{</span>
@ -1316,7 +1316,7 @@ if ('onhashchange' in window) {
<span id="L1254" class="LineNr">1254 </span>
<span id="L1255" class="LineNr">1255 </span><span class="muRecipe">def</span> <a href='061text.mu.html#L1255'>split-first</a> text:text, delim:char<span class="muRecipe"> -&gt; </span>x:text, y:text [
<span id="L1256" class="LineNr">1256 </span> <span class="Constant">local-scope</span>
<span id="L1257" class="LineNr">1257 </span> <span class="Constant">load-ingredients</span>
<span id="L1257" class="LineNr">1257 </span> <span class="Constant">load-inputs</span>
<span id="L1258" class="LineNr">1258 </span> <span class="Comment"># empty text? return empty texts</span>
<span id="L1259" class="LineNr">1259 </span> len:num <span class="Special">&lt;-</span> length *text
<span id="L1260" class="LineNr">1260 </span> <span class="Delimiter">{</span>
@ -1348,7 +1348,7 @@ if ('onhashchange' in window) {
<span id="L1286" class="LineNr">1286 </span>
<span id="L1287" class="LineNr">1287 </span><span class="muRecipe">def</span> <a href='061text.mu.html#L1287'>copy-range</a> buf:text, start:num, end:num<span class="muRecipe"> -&gt; </span>result:text [
<span id="L1288" class="LineNr">1288 </span> <span class="Constant">local-scope</span>
<span id="L1289" class="LineNr">1289 </span> <span class="Constant">load-ingredients</span>
<span id="L1289" class="LineNr">1289 </span> <span class="Constant">load-inputs</span>
<span id="L1290" class="LineNr">1290 </span> <span class="Comment"># if end is out of bounds, trim it</span>
<span id="L1291" class="LineNr">1291 </span> len:num <span class="Special">&lt;-</span> length *buf
<span id="L1292" class="LineNr">1292 </span> end:num <span class="Special">&lt;-</span> min len, end
@ -1407,7 +1407,7 @@ if ('onhashchange' in window) {
<span id="L1345" class="LineNr">1345 </span>
<span id="L1346" class="LineNr">1346 </span><span class="muRecipe">def</span> <a href='061text.mu.html#L1346'>parse-whole-number</a> in:text<span class="muRecipe"> -&gt; </span>out:num, error?:bool [
<span id="L1347" class="LineNr">1347 </span> <span class="Constant">local-scope</span>
<span id="L1348" class="LineNr">1348 </span> <span class="Constant">load-ingredients</span>
<span id="L1348" class="LineNr">1348 </span> <span class="Constant">load-inputs</span>
<span id="L1349" class="LineNr">1349 </span> out <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
<span id="L1350" class="LineNr">1350 </span> result:num <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span> <span class="Comment"># temporary location</span>
<span id="L1351" class="LineNr">1351 </span> i:num <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
@ -1431,7 +1431,7 @@ if ('onhashchange' in window) {
<span id="L1369" class="LineNr">1369 </span><span class="Comment"># (contributed by Ella Couch)</span>
<span id="L1370" class="LineNr">1370 </span><span class="muRecipe">recipe</span> <a href='061text.mu.html#L1370'>character-code-to-digit</a> character-code:number<span class="muRecipe"> -&gt; </span>result:number, error?:boolean [
<span id="L1371" class="LineNr">1371 </span> <span class="Constant">local-scope</span>
<span id="L1372" class="LineNr">1372 </span> <span class="Constant">load-ingredients</span>
<span id="L1372" class="LineNr">1372 </span> <span class="Constant">load-inputs</span>
<span id="L1373" class="LineNr">1373 </span> result <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
<span id="L1374" class="LineNr">1374 </span> error? <span class="Special">&lt;-</span> lesser-than character-code,<span class="Constant"> 48</span> <span class="Comment"># '0'</span>
<span id="L1375" class="LineNr">1375 </span> <span class="muControl">return-if</span> error?

View File

@ -155,7 +155,7 @@ if ('onhashchange' in window) {
<span id="L92" class="LineNr"> 92 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Comment">// new variants that match:</span>
<span id="L93" class="LineNr"> 93 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Comment">// append _:text, ___</span>
<span id="L94" class="LineNr"> 94 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Comment">// will never ever get used.</span>
<span id="L95" class="LineNr"> 95 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='014literal_string.cc.html#L126'>is_literal_text</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> || <a href='027call_ingredient.cc.html#L174'>is_mu_text</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)))</span> <span class="Delimiter">{</span>
<span id="L95" class="LineNr"> 95 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='014literal_string.cc.html#L126'>is_literal_text</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> || <a href='027call_ingredient.cc.html#L177'>is_mu_text</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)))</span> <span class="Delimiter">{</span>
<span id="L96" class="LineNr"> 96 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> j = <span class="Comment">/*</span><span class="Comment">skip base</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">;</span> j &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span> ++j<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L97" class="LineNr"> 97 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> ostringstream ingredient_name<span class="Delimiter">;</span>
<span id="L98" class="LineNr"> 98 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> ingredient_name &lt;&lt; <span class="Constant">&quot;append_&quot;</span> &lt;&lt; i &lt;&lt; <span class="Constant">'_'</span> &lt;&lt; j &lt;&lt; <span class="Constant">&quot;:<a href='043space.cc.html#L82'>address</a>:array:character&quot;</span><span class="Delimiter">;</span>
@ -163,7 +163,7 @@ if ('onhashchange' in window) {
<span id="L100" class="LineNr">100 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>
<span id="L101" class="LineNr">101 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>
<span id="L102" class="LineNr">102 </span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>
<span id="L103" class="LineNr">103 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L103" class="LineNr">103 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L104" class="LineNr">104 </span> <span class="Conceal">¦</span> new_instructions<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>inst<span class="Delimiter">);</span>
<span id="L105" class="LineNr">105 </span> <span class="Delimiter">}</span>
<span id="L106" class="LineNr">106 </span> caller<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>swap<span class="Delimiter">(</span>new_instructions<span class="Delimiter">);</span>
@ -173,7 +173,7 @@ if ('onhashchange' in window) {
<span id="L110" class="LineNr">110 </span><span class="Comment">// replace r with converted text</span>
<span id="L111" class="LineNr">111 </span><span class="Normal">void</span> convert_ingredient_to_text<span class="Delimiter">(</span>reagent&amp; r<span class="Delimiter">,</span> vector&lt;instruction&gt;&amp; out<span class="Delimiter">,</span> <span class="Normal">const</span> string&amp; tmp_var<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L112" class="LineNr">112 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>!r<span class="Delimiter">.</span>type<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span> <span class="Comment">// error; will be handled elsewhere</span>
<span id="L113" class="LineNr">113 </span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='027call_ingredient.cc.html#L174'>is_mu_text</a><span class="Delimiter">(</span>r<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
<span id="L113" class="LineNr">113 </span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='027call_ingredient.cc.html#L177'>is_mu_text</a><span class="Delimiter">(</span>r<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
<span id="L114" class="LineNr">114 </span> <span class="Comment">// don't try to extend static arrays</span>
<span id="L115" class="LineNr">115 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>is_static_array<span class="Delimiter">(</span>r<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
<span id="L116" class="LineNr">116 </span> <a href='010vm.cc.html#L32'>instruction</a> def<span class="Delimiter">;</span>
@ -188,7 +188,7 @@ if ('onhashchange' in window) {
<span id="L125" class="LineNr">125 </span> <span class="Conceal">¦</span> def<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>r<span class="Delimiter">);</span>
<span id="L126" class="LineNr">126 </span> <span class="Delimiter">}</span>
<span id="L127" class="LineNr">127 </span> def<span class="Delimiter">.</span>products<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>reagent<span class="Delimiter">(</span>tmp_var<span class="Delimiter">));</span>
<span id="L128" class="LineNr">128 </span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>def<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L128" class="LineNr">128 </span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>def<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L129" class="LineNr">129 </span> out<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>def<span class="Delimiter">);</span>
<span id="L130" class="LineNr">130 </span> r<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span> <span class="Comment">// reclaim old memory</span>
<span id="L131" class="LineNr">131 </span> r = reagent<span class="Delimiter">(</span>tmp_var<span class="Delimiter">);</span>

View File

@ -79,20 +79,20 @@ if ('onhashchange' in window) {
<span id="L18" class="LineNr"> 18 </span> <a href='075channel.mu.html#L399'>capacity</a>:num <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
<span id="L19" class="LineNr"> 19 </span> <span class="Delimiter">{</span>
<span id="L20" class="LineNr"> 20 </span> <span class="Conceal">¦</span> <span class="Comment"># while read curr-value</span>
<span id="L21" class="LineNr"> 21 </span> <span class="Conceal">¦</span> curr-value:_elem, exists?:bool <span class="Special">&lt;-</span> <span class="Constant">next-ingredient</span>
<span id="L21" class="LineNr"> 21 </span> <span class="Conceal">¦</span> curr-value:_elem, exists?:bool <span class="Special">&lt;-</span> <span class="Constant">next-input</span>
<span id="L22" class="LineNr"> 22 </span> <span class="Conceal">¦</span> <span class="muControl">break-unless</span> exists?
<span id="L23" class="LineNr"> 23 </span> <span class="Conceal">¦</span> <a href='075channel.mu.html#L399'>capacity</a> <span class="Special">&lt;-</span> add <a href='075channel.mu.html#L399'>capacity</a>,<span class="Constant"> 1</span>
<span id="L24" class="LineNr"> 24 </span> <span class="Conceal">¦</span> <span class="muControl">loop</span>
<span id="L25" class="LineNr"> 25 </span> <span class="Delimiter">}</span>
<span id="L26" class="LineNr"> 26 </span> result <span class="Special">&lt;-</span> new <span class="Constant">_elem:type</span>, <a href='075channel.mu.html#L399'>capacity</a>
<span id="L27" class="LineNr"> 27 </span> <span class="Constant">rewind-ingredients</span>
<span id="L27" class="LineNr"> 27 </span> <span class="Constant">rewind-inputs</span>
<span id="L28" class="LineNr"> 28 </span> i:num <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
<span id="L29" class="LineNr"> 29 </span> <span class="Delimiter">{</span>
<span id="L30" class="LineNr"> 30 </span> <span class="Conceal">¦</span> <span class="Comment"># while read curr-value</span>
<span id="L31" class="LineNr"> 31 </span> <span class="Conceal">¦</span> done?:bool <span class="Special">&lt;-</span> greater-or-equal i, <a href='075channel.mu.html#L399'>capacity</a>
<span id="L32" class="LineNr"> 32 </span> <span class="Conceal">¦</span> <span class="muControl">break-if</span> done?
<span id="L33" class="LineNr"> 33 </span> <span class="Conceal">¦</span> curr-value:_elem, exists?:bool <span class="Special">&lt;-</span> <span class="Constant">next-ingredient</span>
<span id="L34" class="LineNr"> 34 </span> <span class="Conceal">¦</span> assert exists?, <span class="Constant">[error in rewinding ingredients to new-array]</span>
<span id="L33" class="LineNr"> 33 </span> <span class="Conceal">¦</span> curr-value:_elem, exists?:bool <span class="Special">&lt;-</span> <span class="Constant">next-input</span>
<span id="L34" class="LineNr"> 34 </span> <span class="Conceal">¦</span> assert exists?, <span class="Constant">[error in rewinding inputs to new-array]</span>
<span id="L35" class="LineNr"> 35 </span> <span class="Conceal">¦</span> *result <span class="Special">&lt;-</span> put-index *result, i, curr-value
<span id="L36" class="LineNr"> 36 </span> <span class="Conceal">¦</span> i <span class="Special">&lt;-</span> add i,<span class="Constant"> 1</span>
<span id="L37" class="LineNr"> 37 </span> <span class="Conceal">¦</span> <span class="muControl">loop</span>
@ -104,13 +104,13 @@ if ('onhashchange' in window) {
<span id="L43" class="LineNr"> 43 </span><span class="Comment"># (contributed by Caleb Couch)</span>
<span id="L44" class="LineNr"> 44 </span><span class="muRecipe">def</span> <a href='063array.mu.html#L44'>fill</a> array:&amp;:@:num<span class="muRecipe"> -&gt; </span>array:&amp;:@:num [
<span id="L45" class="LineNr"> 45 </span> <span class="Constant">local-scope</span>
<span id="L46" class="LineNr"> 46 </span> <span class="Constant">load-ingredients</span>
<span id="L46" class="LineNr"> 46 </span> <span class="Constant">load-inputs</span>
<span id="L47" class="LineNr"> 47 </span> loopn:num <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
<span id="L48" class="LineNr"> 48 </span> length:num <span class="Special">&lt;-</span> length *array
<span id="L49" class="LineNr"> 49 </span> <span class="Delimiter">{</span>
<span id="L50" class="LineNr"> 50 </span> <span class="Conceal">¦</span> length?:bool <span class="Special">&lt;-</span> equal loopn, length
<span id="L51" class="LineNr"> 51 </span> <span class="Conceal">¦</span> <span class="muControl">break-if</span> length?
<span id="L52" class="LineNr"> 52 </span> <span class="Conceal">¦</span> object:num, arg-received?:bool <span class="Special">&lt;-</span> <span class="Constant">next-ingredient</span>
<span id="L52" class="LineNr"> 52 </span> <span class="Conceal">¦</span> object:num, arg-received?:bool <span class="Special">&lt;-</span> <span class="Constant">next-input</span>
<span id="L53" class="LineNr"> 53 </span> <span class="Conceal">¦</span> <span class="muControl">break-unless</span> arg-received?
<span id="L54" class="LineNr"> 54 </span> <span class="Conceal">¦</span> *array <span class="Special">&lt;-</span> put-index *array, loopn, object
<span id="L55" class="LineNr"> 55 </span> <span class="Conceal">¦</span> loopn <span class="Special">&lt;-</span> add loopn,<span class="Constant"> 1</span>
@ -149,7 +149,7 @@ if ('onhashchange' in window) {
<span id="L88" class="LineNr"> 88 </span> ]
<span id="L89" class="LineNr"> 89 </span>]
<span id="L90" class="LineNr"> 90 </span>
<span id="L91" class="LineNr"> 91 </span><span class="muScenario">scenario</span> fill-exits-gracefully-when-given-no-ingredients [
<span id="L91" class="LineNr"> 91 </span><span class="muScenario">scenario</span> fill-exits-gracefully-when-given-no-inputs [
<span id="L92" class="LineNr"> 92 </span> <span class="Constant">local-scope</span>
<span id="L93" class="LineNr"> 93 </span> array:&amp;:@:num <span class="Special">&lt;-</span> new <span class="Constant">number:type</span>,<span class="Constant"> 3</span>
<span id="L94" class="LineNr"> 94 </span> run [
@ -168,7 +168,7 @@ if ('onhashchange' in window) {
<span id="L107" class="LineNr">107 </span><span class="Comment"># (contributed by Caleb Couch)</span>
<span id="L108" class="LineNr">108 </span><span class="muRecipe">def</span> <a href='063array.mu.html#L108'>swap</a> array:&amp;:@:num, index1:num, index2:num<span class="muRecipe"> -&gt; </span>array:&amp;:@:num [
<span id="L109" class="LineNr">109 </span> <span class="Constant">local-scope</span>
<span id="L110" class="LineNr">110 </span> <span class="Constant">load-ingredients</span>
<span id="L110" class="LineNr">110 </span> <span class="Constant">load-inputs</span>
<span id="L111" class="LineNr">111 </span> object1:num <span class="Special">&lt;-</span> index *array, index1
<span id="L112" class="LineNr">112 </span> object2:num <span class="Special">&lt;-</span> index *array, index2
<span id="L113" class="LineNr">113 </span> *array <span class="Special">&lt;-</span> put-index *array, index1, object2
@ -194,7 +194,7 @@ if ('onhashchange' in window) {
<span id="L133" class="LineNr">133 </span><span class="Comment"># (contributed by Caleb Couch)</span>
<span id="L134" class="LineNr">134 </span><span class="muRecipe">def</span> reverse array:&amp;:@:_elem<span class="muRecipe"> -&gt; </span>array:&amp;:@:_elem [
<span id="L135" class="LineNr">135 </span> <span class="Constant">local-scope</span>
<span id="L136" class="LineNr">136 </span> <span class="Constant">load-ingredients</span>
<span id="L136" class="LineNr">136 </span> <span class="Constant">load-inputs</span>
<span id="L137" class="LineNr">137 </span> start:num <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
<span id="L138" class="LineNr">138 </span> length:num <span class="Special">&lt;-</span> length *array
<span id="L139" class="LineNr">139 </span> end:num <span class="Special">&lt;-</span> subtract length,<span class="Constant"> 1</span>

View File

@ -72,20 +72,20 @@ if ('onhashchange' in window) {
<span id="L10" class="LineNr"> 10 </span>
<span id="L11" class="LineNr"> 11 </span><span class="muRecipe">def</span> push x:_elem, l:&amp;:<a href='064list.mu.html#L6'>list</a>:_elem<span class="muRecipe"> -&gt; </span>result:&amp;:<a href='064list.mu.html#L6'>list</a>:_elem/contained-in:l [
<span id="L12" class="LineNr"> 12 </span> <span class="Constant">local-scope</span>
<span id="L13" class="LineNr"> 13 </span> <span class="Constant">load-ingredients</span>
<span id="L13" class="LineNr"> 13 </span> <span class="Constant">load-inputs</span>
<span id="L14" class="LineNr"> 14 </span> result <span class="Special">&lt;-</span> new <span class="Delimiter">{</span>(list _elem): type<span class="Delimiter">}</span>
<span id="L15" class="LineNr"> 15 </span> *result <span class="Special">&lt;-</span> merge x, l
<span id="L16" class="LineNr"> 16 </span>]
<span id="L17" class="LineNr"> 17 </span>
<span id="L18" class="LineNr"> 18 </span><span class="muRecipe">def</span> first in:&amp;:<a href='064list.mu.html#L6'>list</a>:_elem<span class="muRecipe"> -&gt; </span>result:_elem [
<span id="L19" class="LineNr"> 19 </span> <span class="Constant">local-scope</span>
<span id="L20" class="LineNr"> 20 </span> <span class="Constant">load-ingredients</span>
<span id="L20" class="LineNr"> 20 </span> <span class="Constant">load-inputs</span>
<span id="L21" class="LineNr"> 21 </span> result <span class="Special">&lt;-</span> get *in, <span class="Constant">value:offset</span>
<span id="L22" class="LineNr"> 22 </span>]
<span id="L23" class="LineNr"> 23 </span>
<span id="L24" class="LineNr"> 24 </span><span class="muRecipe">def</span> <a href='064list.mu.html#L24'>rest</a> in:&amp;:<a href='064list.mu.html#L6'>list</a>:_elem<span class="muRecipe"> -&gt; </span>result:&amp;:<a href='064list.mu.html#L6'>list</a>:_elem/contained-in:in [
<span id="L25" class="LineNr"> 25 </span> <span class="Constant">local-scope</span>
<span id="L26" class="LineNr"> 26 </span> <span class="Constant">load-ingredients</span>
<span id="L26" class="LineNr"> 26 </span> <span class="Constant">load-inputs</span>
<span id="L27" class="LineNr"> 27 </span> result <span class="Special">&lt;-</span> get *in, <span class="Constant"><a href='065duplex_list.mu.html#L25'>next</a>:offset</span>
<span id="L28" class="LineNr"> 28 </span>]
<span id="L29" class="LineNr"> 29 </span>
@ -112,7 +112,7 @@ if ('onhashchange' in window) {
<span id="L50" class="LineNr"> 50 </span>
<span id="L51" class="LineNr"> 51 </span><span class="muRecipe">def</span> length l:&amp;:<a href='064list.mu.html#L6'>list</a>:_elem<span class="muRecipe"> -&gt; </span>result:num [
<span id="L52" class="LineNr"> 52 </span> <span class="Constant">local-scope</span>
<span id="L53" class="LineNr"> 53 </span> <span class="Constant">load-ingredients</span>
<span id="L53" class="LineNr"> 53 </span> <span class="Constant">load-inputs</span>
<span id="L54" class="LineNr"> 54 </span> result <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
<span id="L55" class="LineNr"> 55 </span> <span class="Delimiter">{</span>
<span id="L56" class="LineNr"> 56 </span> <span class="Conceal">¦</span> <span class="muControl">break-unless</span> l
@ -125,7 +125,7 @@ if ('onhashchange' in window) {
<span id="L63" class="LineNr"> 63 </span><span class="Comment"># insert 'x' after 'in'</span>
<span id="L64" class="LineNr"> 64 </span><span class="muRecipe">def</span> insert x:_elem, in:&amp;:<a href='064list.mu.html#L6'>list</a>:_elem<span class="muRecipe"> -&gt; </span>in:&amp;:<a href='064list.mu.html#L6'>list</a>:_elem [
<span id="L65" class="LineNr"> 65 </span> <span class="Constant">local-scope</span>
<span id="L66" class="LineNr"> 66 </span> <span class="Constant">load-ingredients</span>
<span id="L66" class="LineNr"> 66 </span> <span class="Constant">load-inputs</span>
<span id="L67" class="LineNr"> 67 </span> new-node:&amp;:<a href='064list.mu.html#L6'>list</a>:_elem <span class="Special">&lt;-</span> new <span class="Delimiter">{</span>(list _elem): type<span class="Delimiter">}</span>
<span id="L68" class="LineNr"> 68 </span> *new-node <span class="Special">&lt;-</span> put *new-node, <span class="Constant">value:offset</span>, x
<span id="L69" class="LineNr"> 69 </span> next-node:&amp;:<a href='064list.mu.html#L6'>list</a>:_elem <span class="Special">&lt;-</span> get *in, <span class="Constant"><a href='065duplex_list.mu.html#L25'>next</a>:offset</span>
@ -217,7 +217,7 @@ if ('onhashchange' in window) {
<span id="L155" class="LineNr">155 </span><span class="Comment"># pointers to the head are now invalid.</span>
<span id="L156" class="LineNr">156 </span><span class="muRecipe">def</span> remove x:&amp;:<a href='064list.mu.html#L6'>list</a>:_elem/contained-in:in, in:&amp;:<a href='064list.mu.html#L6'>list</a>:_elem<span class="muRecipe"> -&gt; </span>in:&amp;:<a href='064list.mu.html#L6'>list</a>:_elem [
<span id="L157" class="LineNr">157 </span> <span class="Constant">local-scope</span>
<span id="L158" class="LineNr">158 </span> <span class="Constant">load-ingredients</span>
<span id="L158" class="LineNr">158 </span> <span class="Constant">load-inputs</span>
<span id="L159" class="LineNr">159 </span> <span class="Comment"># if 'x' is null, return</span>
<span id="L160" class="LineNr">160 </span> <span class="muControl">return-unless</span> x
<span id="L161" class="LineNr">161 </span> next-node:&amp;:<a href='064list.mu.html#L6'>list</a>:_elem <span class="Special">&lt;-</span> <a href='064list.mu.html#L24'>rest</a> x
@ -327,7 +327,7 @@ if ('onhashchange' in window) {
<span id="L265" class="LineNr">265 </span><span class="Comment"># (contributed by Caleb Couch)</span>
<span id="L266" class="LineNr">266 </span><span class="muRecipe">def</span> reverse <a href='064list.mu.html#L6'>list</a>:&amp;:<a href='064list.mu.html#L6'>list</a>:_elem temp:&amp;:<a href='064list.mu.html#L6'>list</a>:_elem/contained-in:result<span class="muRecipe"> -&gt; </span>result:&amp;:<a href='064list.mu.html#L6'>list</a>:_elem [
<span id="L267" class="LineNr">267 </span> <span class="Constant">local-scope</span>
<span id="L268" class="LineNr">268 </span> <span class="Constant">load-ingredients</span>
<span id="L268" class="LineNr">268 </span> <span class="Constant">load-inputs</span>
<span id="L269" class="LineNr">269 </span> <span class="muControl">return-unless</span> <a href='064list.mu.html#L6'>list</a>, temp
<span id="L270" class="LineNr">270 </span> object:_elem <span class="Special">&lt;-</span> first, <a href='064list.mu.html#L6'>list</a>
<span id="L271" class="LineNr">271 </span> <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> <a href='064list.mu.html#L24'>rest</a> <a href='064list.mu.html#L6'>list</a>
@ -366,7 +366,7 @@ if ('onhashchange' in window) {
<span id="L304" class="LineNr">304 </span>
<span id="L305" class="LineNr">305 </span><span class="muRecipe">def</span> to-text in:&amp;:<a href='064list.mu.html#L6'>list</a>:_elem<span class="muRecipe"> -&gt; </span>result:text [
<span id="L306" class="LineNr">306 </span> <span class="Constant">local-scope</span>
<span id="L307" class="LineNr">307 </span> <span class="Constant">load-ingredients</span>
<span id="L307" class="LineNr">307 </span> <span class="Constant">load-inputs</span>
<span id="L308" class="LineNr">308 </span> buf:&amp;:<a href='061text.mu.html#L120'>buffer</a>:char <span class="Special">&lt;-</span> <a href='061text.mu.html#L125'>new-buffer</a><span class="Constant"> 80</span>
<span id="L309" class="LineNr">309 </span> buf <span class="Special">&lt;-</span> to-buffer in, buf
<span id="L310" class="LineNr">310 </span> result <span class="Special">&lt;-</span> <a href='061text.mu.html#L338'>buffer-to-array</a> buf
@ -375,7 +375,7 @@ if ('onhashchange' in window) {
<span id="L313" class="LineNr">313 </span><span class="Comment"># variant of 'to-text' which stops printing after a few elements (and so is robust to cycles)</span>
<span id="L314" class="LineNr">314 </span><span class="muRecipe">def</span> to-text-line in:&amp;:<a href='064list.mu.html#L6'>list</a>:_elem<span class="muRecipe"> -&gt; </span>result:text [
<span id="L315" class="LineNr">315 </span> <span class="Constant">local-scope</span>
<span id="L316" class="LineNr">316 </span> <span class="Constant">load-ingredients</span>
<span id="L316" class="LineNr">316 </span> <span class="Constant">load-inputs</span>
<span id="L317" class="LineNr">317 </span> buf:&amp;:<a href='061text.mu.html#L120'>buffer</a>:char <span class="Special">&lt;-</span> <a href='061text.mu.html#L125'>new-buffer</a><span class="Constant"> 80</span>
<span id="L318" class="LineNr">318 </span> buf <span class="Special">&lt;-</span> to-buffer in, buf,<span class="Constant"> 6</span> <span class="Comment"># max elements to display</span>
<span id="L319" class="LineNr">319 </span> result <span class="Special">&lt;-</span> <a href='061text.mu.html#L338'>buffer-to-array</a> buf
@ -383,7 +383,7 @@ if ('onhashchange' in window) {
<span id="L321" class="LineNr">321 </span>
<span id="L322" class="LineNr">322 </span><span class="muRecipe">def</span> to-buffer in:&amp;:<a href='064list.mu.html#L6'>list</a>:_elem, buf:&amp;:<a href='061text.mu.html#L120'>buffer</a>:char<span class="muRecipe"> -&gt; </span>buf:&amp;:<a href='061text.mu.html#L120'>buffer</a>:char [
<span id="L323" class="LineNr">323 </span> <span class="Constant">local-scope</span>
<span id="L324" class="LineNr">324 </span> <span class="Constant">load-ingredients</span>
<span id="L324" class="LineNr">324 </span> <span class="Constant">load-inputs</span>
<span id="L325" class="LineNr">325 </span> <span class="Delimiter">{</span>
<span id="L326" class="LineNr">326 </span> <span class="Conceal">¦</span> <span class="muControl">break-if</span> in
<span id="L327" class="LineNr">327 </span> <span class="Conceal">¦</span> buf <span class="Special">&lt;-</span> append buf, <span class="Constant">[[]</span>]
@ -398,9 +398,9 @@ if ('onhashchange' in window) {
<span id="L336" class="LineNr">336 </span> <span class="muControl">return-unless</span> <a href='065duplex_list.mu.html#L25'>next</a>
<span id="L337" class="LineNr">337 </span> buf <span class="Special">&lt;-</span> append buf, <span class="Constant">[ -&gt; ]</span>
<span id="L338" class="LineNr">338 </span> <span class="Comment"># and recurse</span>
<span id="L339" class="LineNr">339 </span> remaining:num, optional-ingredient-found?:bool <span class="Special">&lt;-</span> <span class="Constant">next-ingredient</span>
<span id="L339" class="LineNr">339 </span> remaining:num, optional-input-found?:bool <span class="Special">&lt;-</span> <span class="Constant">next-input</span>
<span id="L340" class="LineNr">340 </span> <span class="Delimiter">{</span>
<span id="L341" class="LineNr">341 </span> <span class="Conceal">¦</span> <span class="muControl">break-if</span> optional-ingredient-found?
<span id="L341" class="LineNr">341 </span> <span class="Conceal">¦</span> <span class="muControl">break-if</span> optional-input-found?
<span id="L342" class="LineNr">342 </span> <span class="Conceal">¦</span> <span class="Comment"># unlimited recursion</span>
<span id="L343" class="LineNr">343 </span> <span class="Conceal">¦</span> buf <span class="Special">&lt;-</span> to-buffer <a href='065duplex_list.mu.html#L25'>next</a>, buf
<span id="L344" class="LineNr">344 </span> <span class="Conceal">¦</span> <span class="muControl">return</span>

View File

@ -70,7 +70,7 @@ if ('onhashchange' in window) {
<span id="L8" class="LineNr"> 8 </span>
<span id="L9" class="LineNr"> 9 </span><span class="muRecipe">def</span> push x:_elem, in:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem/contained-in:result<span class="muRecipe"> -&gt; </span>result:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem [
<span id="L10" class="LineNr"> 10 </span> <span class="Constant">local-scope</span>
<span id="L11" class="LineNr"> 11 </span> <span class="Constant">load-ingredients</span>
<span id="L11" class="LineNr"> 11 </span> <span class="Constant">load-inputs</span>
<span id="L12" class="LineNr"> 12 </span> result:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem <span class="Special">&lt;-</span> new <span class="Delimiter">{</span>(duplex-list _elem): type<span class="Delimiter">}</span>
<span id="L13" class="LineNr"> 13 </span> *result <span class="Special">&lt;-</span> merge x, in,<span class="Constant"> 0</span>
<span id="L14" class="LineNr"> 14 </span> <span class="muControl">return-unless</span> in
@ -79,21 +79,21 @@ if ('onhashchange' in window) {
<span id="L17" class="LineNr"> 17 </span>
<span id="L18" class="LineNr"> 18 </span><span class="muRecipe">def</span> first in:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem<span class="muRecipe"> -&gt; </span>result:_elem [
<span id="L19" class="LineNr"> 19 </span> <span class="Constant">local-scope</span>
<span id="L20" class="LineNr"> 20 </span> <span class="Constant">load-ingredients</span>
<span id="L20" class="LineNr"> 20 </span> <span class="Constant">load-inputs</span>
<span id="L21" class="LineNr"> 21 </span> <span class="muControl">return-unless</span> in,<span class="Constant"> 0</span>
<span id="L22" class="LineNr"> 22 </span> result <span class="Special">&lt;-</span> get *in, <span class="Constant">value:offset</span>
<span id="L23" class="LineNr"> 23 </span>]
<span id="L24" class="LineNr"> 24 </span>
<span id="L25" class="LineNr"> 25 </span><span class="muRecipe">def</span> <a href='065duplex_list.mu.html#L25'>next</a> in:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem<span class="muRecipe"> -&gt; </span>result:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem/contained-in:in [
<span id="L26" class="LineNr"> 26 </span> <span class="Constant">local-scope</span>
<span id="L27" class="LineNr"> 27 </span> <span class="Constant">load-ingredients</span>
<span id="L27" class="LineNr"> 27 </span> <span class="Constant">load-inputs</span>
<span id="L28" class="LineNr"> 28 </span> <span class="muControl">return-unless</span> in,<span class="Constant"> 0</span>
<span id="L29" class="LineNr"> 29 </span> result <span class="Special">&lt;-</span> get *in, <span class="Constant"><a href='065duplex_list.mu.html#L25'>next</a>:offset</span>
<span id="L30" class="LineNr"> 30 </span>]
<span id="L31" class="LineNr"> 31 </span>
<span id="L32" class="LineNr"> 32 </span><span class="muRecipe">def</span> <a href='065duplex_list.mu.html#L32'>prev</a> in:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem<span class="muRecipe"> -&gt; </span>result:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem/contained-in:in [
<span id="L33" class="LineNr"> 33 </span> <span class="Constant">local-scope</span>
<span id="L34" class="LineNr"> 34 </span> <span class="Constant">load-ingredients</span>
<span id="L34" class="LineNr"> 34 </span> <span class="Constant">load-inputs</span>
<span id="L35" class="LineNr"> 35 </span> <span class="muControl">return-unless</span> in,<span class="Constant"> 0</span>
<span id="L36" class="LineNr"> 36 </span> result <span class="Special">&lt;-</span> get *in, <span class="Constant"><a href='065duplex_list.mu.html#L32'>prev</a>:offset</span>
<span id="L37" class="LineNr"> 37 </span> <span class="muControl">return</span> result
@ -143,7 +143,7 @@ if ('onhashchange' in window) {
<span id="L81" class="LineNr"> 81 </span>
<span id="L82" class="LineNr"> 82 </span><span class="muRecipe">def</span> length l:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem<span class="muRecipe"> -&gt; </span>result:num [
<span id="L83" class="LineNr"> 83 </span> <span class="Constant">local-scope</span>
<span id="L84" class="LineNr"> 84 </span> <span class="Constant">load-ingredients</span>
<span id="L84" class="LineNr"> 84 </span> <span class="Constant">load-inputs</span>
<span id="L85" class="LineNr"> 85 </span> result <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
<span id="L86" class="LineNr"> 86 </span> <span class="Delimiter">{</span>
<span id="L87" class="LineNr"> 87 </span> <span class="Conceal">¦</span> <span class="muControl">break-unless</span> l
@ -156,7 +156,7 @@ if ('onhashchange' in window) {
<span id="L94" class="LineNr"> 94 </span><span class="Comment"># insert 'x' after 'in'</span>
<span id="L95" class="LineNr"> 95 </span><span class="muRecipe">def</span> insert x:_elem, in:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem<span class="muRecipe"> -&gt; </span>in:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem [
<span id="L96" class="LineNr"> 96 </span> <span class="Constant">local-scope</span>
<span id="L97" class="LineNr"> 97 </span> <span class="Constant">load-ingredients</span>
<span id="L97" class="LineNr"> 97 </span> <span class="Constant">load-inputs</span>
<span id="L98" class="LineNr"> 98 </span> new-node:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem <span class="Special">&lt;-</span> new <span class="Delimiter">{</span>(duplex-list _elem): type<span class="Delimiter">}</span>
<span id="L99" class="LineNr"> 99 </span> *new-node <span class="Special">&lt;-</span> put *new-node, <span class="Constant">value:offset</span>, x
<span id="L100" class="LineNr">100 </span> <span class="Comment"># save old next before changing it</span>
@ -285,7 +285,7 @@ if ('onhashchange' in window) {
<span id="L223" class="LineNr">223 </span><span class="Comment"># pointers to the head are now invalid.</span>
<span id="L224" class="LineNr">224 </span><span class="muRecipe">def</span> remove x:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem/contained-in:in, in:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem<span class="muRecipe"> -&gt; </span>in:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem [
<span id="L225" class="LineNr">225 </span> <span class="Constant">local-scope</span>
<span id="L226" class="LineNr">226 </span> <span class="Constant">load-ingredients</span>
<span id="L226" class="LineNr">226 </span> <span class="Constant">load-inputs</span>
<span id="L227" class="LineNr">227 </span> <span class="Comment"># if 'x' is null, return</span>
<span id="L228" class="LineNr">228 </span> <span class="muControl">return-unless</span> x
<span id="L229" class="LineNr">229 </span> next-node:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem <span class="Special">&lt;-</span> get *x, <span class="Constant"><a href='065duplex_list.mu.html#L25'>next</a>:offset</span>
@ -409,7 +409,7 @@ if ('onhashchange' in window) {
<span id="L347" class="LineNr">347 </span>
<span id="L348" class="LineNr">348 </span><span class="muRecipe">def</span> remove x:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem/contained-in:in, n:num, in:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem<span class="muRecipe"> -&gt; </span>in:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem [
<span id="L349" class="LineNr">349 </span> <span class="Constant">local-scope</span>
<span id="L350" class="LineNr">350 </span> <span class="Constant">load-ingredients</span>
<span id="L350" class="LineNr">350 </span> <span class="Constant">load-inputs</span>
<span id="L351" class="LineNr">351 </span> i:num <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
<span id="L352" class="LineNr">352 </span> curr:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem <span class="Special">&lt;-</span> copy x
<span id="L353" class="LineNr">353 </span> <span class="Delimiter">{</span>
@ -446,7 +446,7 @@ if ('onhashchange' in window) {
<span id="L384" class="LineNr">384 </span><span class="Comment"># clean way to return the new head pointer.</span>
<span id="L385" class="LineNr">385 </span><span class="muRecipe">def</span> <a href='065duplex_list.mu.html#L385'>remove-between</a> start:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem, end:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem/contained-in:start<span class="muRecipe"> -&gt; </span>start:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem [
<span id="L386" class="LineNr">386 </span> <span class="Constant">local-scope</span>
<span id="L387" class="LineNr">387 </span> <span class="Constant">load-ingredients</span>
<span id="L387" class="LineNr">387 </span> <span class="Constant">load-inputs</span>
<span id="L388" class="LineNr">388 </span> <a href='065duplex_list.mu.html#L25'>next</a>:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem <span class="Special">&lt;-</span> get *start, <span class="Constant"><a href='065duplex_list.mu.html#L25'>next</a>:offset</span>
<span id="L389" class="LineNr">389 </span> nothing-to-delete?:bool <span class="Special">&lt;-</span> equal <a href='065duplex_list.mu.html#L25'>next</a>, end
<span id="L390" class="LineNr">390 </span> <span class="muControl">return-if</span> nothing-to-delete?
@ -586,7 +586,7 @@ if ('onhashchange' in window) {
<span id="L524" class="LineNr">524 </span><span class="Comment"># insert list beginning at 'start' after 'in'</span>
<span id="L525" class="LineNr">525 </span><span class="muRecipe">def</span> <a href='065duplex_list.mu.html#L525'>splice</a> in:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem, start:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem/contained-in:in<span class="muRecipe"> -&gt; </span>in:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem [
<span id="L526" class="LineNr">526 </span> <span class="Constant">local-scope</span>
<span id="L527" class="LineNr">527 </span> <span class="Constant">load-ingredients</span>
<span id="L527" class="LineNr">527 </span> <span class="Constant">load-inputs</span>
<span id="L528" class="LineNr">528 </span> <span class="muControl">return-unless</span> in
<span id="L529" class="LineNr">529 </span> <span class="muControl">return-unless</span> start
<span id="L530" class="LineNr">530 </span> end:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L572'>last</a> start
@ -603,7 +603,7 @@ if ('onhashchange' in window) {
<span id="L541" class="LineNr">541 </span><span class="Comment"># insert contents of 'new' after 'in'</span>
<span id="L542" class="LineNr">542 </span><span class="muRecipe">def</span> insert in:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem, new:&amp;:@:_elem<span class="muRecipe"> -&gt; </span>in:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem [
<span id="L543" class="LineNr">543 </span> <span class="Constant">local-scope</span>
<span id="L544" class="LineNr">544 </span> <span class="Constant">load-ingredients</span>
<span id="L544" class="LineNr">544 </span> <span class="Constant">load-inputs</span>
<span id="L545" class="LineNr">545 </span> <span class="muControl">return-unless</span> in
<span id="L546" class="LineNr">546 </span> <span class="muControl">return-unless</span> new
<span id="L547" class="LineNr">547 </span> len:num <span class="Special">&lt;-</span> length *new
@ -624,7 +624,7 @@ if ('onhashchange' in window) {
<span id="L562" class="LineNr">562 </span>
<span id="L563" class="LineNr">563 </span><span class="muRecipe">def</span> append in:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem, new:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem/contained-in:in<span class="muRecipe"> -&gt; </span>in:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem [
<span id="L564" class="LineNr">564 </span> <span class="Constant">local-scope</span>
<span id="L565" class="LineNr">565 </span> <span class="Constant">load-ingredients</span>
<span id="L565" class="LineNr">565 </span> <span class="Constant">load-inputs</span>
<span id="L566" class="LineNr">566 </span> <a href='065duplex_list.mu.html#L572'>last</a>:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L572'>last</a> in
<span id="L567" class="LineNr">567 </span> *last <span class="Special">&lt;-</span> put *last, <span class="Constant"><a href='065duplex_list.mu.html#L25'>next</a>:offset</span>, new
<span id="L568" class="LineNr">568 </span> <span class="muControl">return-unless</span> new
@ -633,7 +633,7 @@ if ('onhashchange' in window) {
<span id="L571" class="LineNr">571 </span>
<span id="L572" class="LineNr">572 </span><span class="muRecipe">def</span> <a href='065duplex_list.mu.html#L572'>last</a> in:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem<span class="muRecipe"> -&gt; </span>result:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem [
<span id="L573" class="LineNr">573 </span> <span class="Constant">local-scope</span>
<span id="L574" class="LineNr">574 </span> <span class="Constant">load-ingredients</span>
<span id="L574" class="LineNr">574 </span> <span class="Constant">load-inputs</span>
<span id="L575" class="LineNr">575 </span> result <span class="Special">&lt;-</span> copy in
<span id="L576" class="LineNr">576 </span> <span class="Delimiter">{</span>
<span id="L577" class="LineNr">577 </span> <span class="Conceal">¦</span> <a href='065duplex_list.mu.html#L25'>next</a>:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L25'>next</a> result
@ -646,7 +646,7 @@ if ('onhashchange' in window) {
<span id="L584" class="LineNr">584 </span><span class="Comment"># does a duplex list start with a certain sequence of elements?</span>
<span id="L585" class="LineNr">585 </span><span class="muRecipe">def</span> <a href='065duplex_list.mu.html#L585'>match</a> x:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem, y:&amp;:@:_elem<span class="muRecipe"> -&gt; </span>result:bool [
<span id="L586" class="LineNr">586 </span> <span class="Constant">local-scope</span>
<span id="L587" class="LineNr">587 </span> <span class="Constant">load-ingredients</span>
<span id="L587" class="LineNr">587 </span> <span class="Constant">load-inputs</span>
<span id="L588" class="LineNr">588 </span> i:num <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
<span id="L589" class="LineNr">589 </span> max:num <span class="Special">&lt;-</span> length *y
<span id="L590" class="LineNr">590 </span> <span class="Delimiter">{</span>
@ -691,7 +691,7 @@ if ('onhashchange' in window) {
<span id="L629" class="LineNr">629 </span><span class="Comment"># helper for debugging</span>
<span id="L630" class="LineNr">630 </span><span class="muRecipe">def</span> <a href='065duplex_list.mu.html#L630'>dump-from</a> x:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem [
<span id="L631" class="LineNr">631 </span> <span class="Constant">local-scope</span>
<span id="L632" class="LineNr">632 </span> <span class="Constant">load-ingredients</span>
<span id="L632" class="LineNr">632 </span> <span class="Constant">load-inputs</span>
<span id="L633" class="LineNr">633 </span> $print x, <span class="Constant">[: ]</span>
<span id="L634" class="LineNr">634 </span> <span class="Delimiter">{</span>
<span id="L635" class="LineNr">635 </span> <span class="Conceal">¦</span> <span class="muControl">break-unless</span> x
@ -724,7 +724,7 @@ if ('onhashchange' in window) {
<span id="L662" class="LineNr">662 </span>
<span id="L663" class="LineNr">663 </span><span class="muRecipe">def</span> to-text in:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem<span class="muRecipe"> -&gt; </span>result:text [
<span id="L664" class="LineNr">664 </span> <span class="Constant">local-scope</span>
<span id="L665" class="LineNr">665 </span> <span class="Constant">load-ingredients</span>
<span id="L665" class="LineNr">665 </span> <span class="Constant">load-inputs</span>
<span id="L666" class="LineNr">666 </span> buf:&amp;:<a href='061text.mu.html#L120'>buffer</a>:char <span class="Special">&lt;-</span> <a href='061text.mu.html#L125'>new-buffer</a><span class="Constant"> 80</span>
<span id="L667" class="LineNr">667 </span> buf <span class="Special">&lt;-</span> to-buffer in, buf
<span id="L668" class="LineNr">668 </span> result <span class="Special">&lt;-</span> <a href='061text.mu.html#L338'>buffer-to-array</a> buf
@ -733,7 +733,7 @@ if ('onhashchange' in window) {
<span id="L671" class="LineNr">671 </span><span class="Comment"># variant of 'to-text' which stops printing after a few elements (and so is robust to cycles)</span>
<span id="L672" class="LineNr">672 </span><span class="muRecipe">def</span> to-text-line in:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem<span class="muRecipe"> -&gt; </span>result:text [
<span id="L673" class="LineNr">673 </span> <span class="Constant">local-scope</span>
<span id="L674" class="LineNr">674 </span> <span class="Constant">load-ingredients</span>
<span id="L674" class="LineNr">674 </span> <span class="Constant">load-inputs</span>
<span id="L675" class="LineNr">675 </span> buf:&amp;:<a href='061text.mu.html#L120'>buffer</a>:char <span class="Special">&lt;-</span> <a href='061text.mu.html#L125'>new-buffer</a><span class="Constant"> 80</span>
<span id="L676" class="LineNr">676 </span> buf <span class="Special">&lt;-</span> to-buffer in, buf,<span class="Constant"> 6</span> <span class="Comment"># max elements to display</span>
<span id="L677" class="LineNr">677 </span> result <span class="Special">&lt;-</span> <a href='061text.mu.html#L338'>buffer-to-array</a> buf
@ -741,7 +741,7 @@ if ('onhashchange' in window) {
<span id="L679" class="LineNr">679 </span>
<span id="L680" class="LineNr">680 </span><span class="muRecipe">def</span> to-buffer in:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem, buf:&amp;:<a href='061text.mu.html#L120'>buffer</a>:char<span class="muRecipe"> -&gt; </span>buf:&amp;:<a href='061text.mu.html#L120'>buffer</a>:char [
<span id="L681" class="LineNr">681 </span> <span class="Constant">local-scope</span>
<span id="L682" class="LineNr">682 </span> <span class="Constant">load-ingredients</span>
<span id="L682" class="LineNr">682 </span> <span class="Constant">load-inputs</span>
<span id="L683" class="LineNr">683 </span> <span class="Delimiter">{</span>
<span id="L684" class="LineNr">684 </span> <span class="Conceal">¦</span> <span class="muControl">break-if</span> in
<span id="L685" class="LineNr">685 </span> <span class="Conceal">¦</span> buf <span class="Special">&lt;-</span> append buf, <span class="Constant">[[]</span>]
@ -756,9 +756,9 @@ if ('onhashchange' in window) {
<span id="L694" class="LineNr">694 </span> <span class="muControl">return-unless</span> <a href='065duplex_list.mu.html#L25'>next</a>
<span id="L695" class="LineNr">695 </span> buf <span class="Special">&lt;-</span> append buf, <span class="Constant">[ &lt;-&gt; ]</span>
<span id="L696" class="LineNr">696 </span> <span class="Comment"># and recurse</span>
<span id="L697" class="LineNr">697 </span> remaining:num, optional-ingredient-found?:bool <span class="Special">&lt;-</span> <span class="Constant">next-ingredient</span>
<span id="L697" class="LineNr">697 </span> remaining:num, optional-input-found?:bool <span class="Special">&lt;-</span> <span class="Constant">next-input</span>
<span id="L698" class="LineNr">698 </span> <span class="Delimiter">{</span>
<span id="L699" class="LineNr">699 </span> <span class="Conceal">¦</span> <span class="muControl">break-if</span> optional-ingredient-found?
<span id="L699" class="LineNr">699 </span> <span class="Conceal">¦</span> <span class="muControl">break-if</span> optional-input-found?
<span id="L700" class="LineNr">700 </span> <span class="Conceal">¦</span> <span class="Comment"># unlimited recursion</span>
<span id="L701" class="LineNr">701 </span> <span class="Conceal">¦</span> buf <span class="Special">&lt;-</span> to-buffer <a href='065duplex_list.mu.html#L25'>next</a>, buf
<span id="L702" class="LineNr">702 </span> <span class="Conceal">¦</span> <span class="muControl">return</span>

View File

@ -67,7 +67,7 @@ if ('onhashchange' in window) {
<span id="L6" class="LineNr"> 6 </span>
<span id="L7" class="LineNr"> 7 </span><span class="muRecipe">def</span> <a href='066stream.mu.html#L7'>new-stream</a> s:&amp;:@:_elem<span class="muRecipe"> -&gt; </span>result:&amp;:<a href='066stream.mu.html#L2'>stream</a>:_elem [
<span id="L8" class="LineNr"> 8 </span> <span class="Constant">local-scope</span>
<span id="L9" class="LineNr"> 9 </span> <span class="Constant">load-ingredients</span>
<span id="L9" class="LineNr"> 9 </span> <span class="Constant">load-inputs</span>
<span id="L10" class="LineNr">10 </span> <span class="muControl">return-unless</span> s, <span class="Constant">0/null</span>
<span id="L11" class="LineNr">11 </span> result <span class="Special">&lt;-</span> new <span class="Delimiter">{</span>(stream _elem): type<span class="Delimiter">}</span>
<span id="L12" class="LineNr">12 </span> *result <span class="Special">&lt;-</span> put *result, <span class="Constant">index:offset</span>,<span class="Constant"> 0</span>
@ -76,14 +76,14 @@ if ('onhashchange' in window) {
<span id="L15" class="LineNr">15 </span>
<span id="L16" class="LineNr">16 </span><span class="muRecipe">def</span> <a href='066stream.mu.html#L16'>rewind</a> in:&amp;:<a href='066stream.mu.html#L2'>stream</a>:_elem<span class="muRecipe"> -&gt; </span>in:&amp;:<a href='066stream.mu.html#L2'>stream</a>:_elem [
<span id="L17" class="LineNr">17 </span> <span class="Constant">local-scope</span>
<span id="L18" class="LineNr">18 </span> <span class="Constant">load-ingredients</span>
<span id="L18" class="LineNr">18 </span> <span class="Constant">load-inputs</span>
<span id="L19" class="LineNr">19 </span> <span class="muControl">return-unless</span> in
<span id="L20" class="LineNr">20 </span> *in <span class="Special">&lt;-</span> put *in, <span class="Constant">index:offset</span>,<span class="Constant"> 0</span>
<span id="L21" class="LineNr">21 </span>]
<span id="L22" class="LineNr">22 </span>
<span id="L23" class="LineNr">23 </span><span class="muRecipe">def</span> read in:&amp;:<a href='066stream.mu.html#L2'>stream</a>:_elem<span class="muRecipe"> -&gt; </span>result:_elem, empty?:bool, in:&amp;:<a href='066stream.mu.html#L2'>stream</a>:_elem [
<span id="L24" class="LineNr">24 </span> <span class="Constant">local-scope</span>
<span id="L25" class="LineNr">25 </span> <span class="Constant">load-ingredients</span>
<span id="L25" class="LineNr">25 </span> <span class="Constant">load-inputs</span>
<span id="L26" class="LineNr">26 </span> assert in, <span class="Constant">[cannot read; <a href='066stream.mu.html#L2'>stream</a> has no data]</span>
<span id="L27" class="LineNr">27 </span> empty? <span class="Special">&lt;-</span> copy <span class="Constant">0/false</span>
<span id="L28" class="LineNr">28 </span> idx:num <span class="Special">&lt;-</span> get *in, <span class="Constant">index:offset</span>
@ -102,7 +102,7 @@ if ('onhashchange' in window) {
<span id="L41" class="LineNr">41 </span>
<span id="L42" class="LineNr">42 </span><span class="muRecipe">def</span> <a href='066stream.mu.html#L42'>peek</a> in:&amp;:<a href='066stream.mu.html#L2'>stream</a>:_elem<span class="muRecipe"> -&gt; </span>result:_elem, empty?:bool [
<span id="L43" class="LineNr">43 </span> <span class="Constant">local-scope</span>
<span id="L44" class="LineNr">44 </span> <span class="Constant">load-ingredients</span>
<span id="L44" class="LineNr">44 </span> <span class="Constant">load-inputs</span>
<span id="L45" class="LineNr">45 </span> assert in, <span class="Constant">[cannot peek; <a href='066stream.mu.html#L2'>stream</a> has no data]</span>
<span id="L46" class="LineNr">46 </span> empty?:bool <span class="Special">&lt;-</span> copy <span class="Constant">0/false</span>
<span id="L47" class="LineNr">47 </span> idx:num <span class="Special">&lt;-</span> get *in, <span class="Constant">index:offset</span>
@ -119,7 +119,7 @@ if ('onhashchange' in window) {
<span id="L58" class="LineNr">58 </span>
<span id="L59" class="LineNr">59 </span><span class="muRecipe">def</span> <a href='066stream.mu.html#L59'>read-line</a> in:&amp;:<a href='066stream.mu.html#L2'>stream</a>:char<span class="muRecipe"> -&gt; </span>result:text, in:&amp;:<a href='066stream.mu.html#L2'>stream</a>:char [
<span id="L60" class="LineNr">60 </span> <span class="Constant">local-scope</span>
<span id="L61" class="LineNr">61 </span> <span class="Constant">load-ingredients</span>
<span id="L61" class="LineNr">61 </span> <span class="Constant">load-inputs</span>
<span id="L62" class="LineNr">62 </span> assert in, <span class="Constant">[cannot read-line; <a href='066stream.mu.html#L2'>stream</a> has no data]</span>
<span id="L63" class="LineNr">63 </span> idx:num <span class="Special">&lt;-</span> get *in, <span class="Constant">index:offset</span>
<span id="L64" class="LineNr">64 </span> s:text <span class="Special">&lt;-</span> get *in, <span class="Constant">data:offset</span>
@ -132,7 +132,7 @@ if ('onhashchange' in window) {
<span id="L71" class="LineNr">71 </span>
<span id="L72" class="LineNr">72 </span><span class="muRecipe">def</span> <a href='066stream.mu.html#L72'>end-of-stream?</a> in:&amp;:<a href='066stream.mu.html#L2'>stream</a>:_elem<span class="muRecipe"> -&gt; </span>result:bool [
<span id="L73" class="LineNr">73 </span> <span class="Constant">local-scope</span>
<span id="L74" class="LineNr">74 </span> <span class="Constant">load-ingredients</span>
<span id="L74" class="LineNr">74 </span> <span class="Constant">load-inputs</span>
<span id="L75" class="LineNr">75 </span> assert in, <span class="Constant">[cannot check end-of-stream?; <a href='066stream.mu.html#L2'>stream</a> has no data]</span>
<span id="L76" class="LineNr">76 </span> idx:num <span class="Special">&lt;-</span> get *in, <span class="Constant">index:offset</span>
<span id="L77" class="LineNr">77 </span> s:&amp;:@:_elem <span class="Special">&lt;-</span> get *in, <span class="Constant">data:offset</span>

View File

@ -61,7 +61,7 @@ if ('onhashchange' in window) {
<pre id='vimCodeElement'>
<span id="L1" class="LineNr"> 1 </span><span class="muRecipe">def</span> <a href='068random.mu.html#L1'>random</a> generator:&amp;:<a href='066stream.mu.html#L2'>stream</a>:num<span class="muRecipe"> -&gt; </span>result:num, fail?:bool, generator:&amp;:<a href='066stream.mu.html#L2'>stream</a>:num [
<span id="L2" class="LineNr"> 2 </span> <span class="Constant">local-scope</span>
<span id="L3" class="LineNr"> 3 </span> <span class="Constant">load-ingredients</span>
<span id="L3" class="LineNr"> 3 </span> <span class="Constant">load-inputs</span>
<span id="L4" class="LineNr"> 4 </span> <span class="Delimiter">{</span>
<span id="L5" class="LineNr"> 5 </span> <span class="Conceal">¦</span> <span class="muControl">break-if</span> generator
<span id="L6" class="LineNr"> 6 </span> <span class="Conceal">¦</span> <span class="Comment"># generator is 0? use real random-number generator</span>
@ -74,20 +74,20 @@ if ('onhashchange' in window) {
<span id="L13" class="LineNr">13 </span><span class="Comment"># helper for tests</span>
<span id="L14" class="LineNr">14 </span><span class="muRecipe">def</span> <a href='068random.mu.html#L14'>assume-random-numbers</a><span class="muRecipe"> -&gt; </span>result:&amp;:<a href='066stream.mu.html#L2'>stream</a>:num [
<span id="L15" class="LineNr">15 </span> <span class="Constant">local-scope</span>
<span id="L16" class="LineNr">16 </span> <span class="Constant">load-ingredients</span>
<span id="L16" class="LineNr">16 </span> <span class="Constant">load-inputs</span>
<span id="L17" class="LineNr">17 </span> <span class="Comment"># compute result-len, space to allocate in result</span>
<span id="L18" class="LineNr">18 </span> result-len:num <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
<span id="L19" class="LineNr">19 </span> <span class="Delimiter">{</span>
<span id="L20" class="LineNr">20 </span> <span class="Conceal">¦</span> _, arg-received?:bool <span class="Special">&lt;-</span> <span class="Constant">next-ingredient</span>
<span id="L20" class="LineNr">20 </span> <span class="Conceal">¦</span> _, arg-received?:bool <span class="Special">&lt;-</span> <span class="Constant">next-input</span>
<span id="L21" class="LineNr">21 </span> <span class="Conceal">¦</span> <span class="muControl">break-unless</span> arg-received?
<span id="L22" class="LineNr">22 </span> <span class="Conceal">¦</span> result-len <span class="Special">&lt;-</span> add result-len,<span class="Constant"> 1</span>
<span id="L23" class="LineNr">23 </span> <span class="Conceal">¦</span> <span class="muControl">loop</span>
<span id="L24" class="LineNr">24 </span> <span class="Delimiter">}</span>
<span id="L25" class="LineNr">25 </span> <span class="Constant">rewind-ingredients</span>
<span id="L25" class="LineNr">25 </span> <span class="Constant">rewind-inputs</span>
<span id="L26" class="LineNr">26 </span> result-data:&amp;:@:num <span class="Special">&lt;-</span> new <span class="Constant">number:type</span>, result-len
<span id="L27" class="LineNr">27 </span> idx: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 class="Conceal">¦</span> curr:num, arg-received?:bool <span class="Special">&lt;-</span> <span class="Constant">next-ingredient</span>
<span id="L29" class="LineNr">29 </span> <span class="Conceal">¦</span> curr:num, arg-received?:bool <span class="Special">&lt;-</span> <span class="Constant">next-input</span>
<span id="L30" class="LineNr">30 </span> <span class="Conceal">¦</span> <span class="muControl">break-unless</span> arg-received?
<span id="L31" class="LineNr">31 </span> <span class="Conceal">¦</span> *result-data <span class="Special">&lt;-</span> put-index *result-data, idx, curr
<span id="L32" class="LineNr">32 </span> <span class="Conceal">¦</span> idx <span class="Special">&lt;-</span> add idx,<span class="Constant"> 1</span>
@ -118,7 +118,7 @@ if ('onhashchange' in window) {
<span id="L57" class="LineNr">57 </span><span class="Comment"># generate a random integer in the semi-open interval [start, end)</span>
<span id="L58" class="LineNr">58 </span><span class="muRecipe">def</span> <a href='068random.mu.html#L58'>random-in-range</a> generator:&amp;:<a href='066stream.mu.html#L2'>stream</a>:num, start:num, end:num<span class="muRecipe"> -&gt; </span>result:num, fail?:bool, generator:&amp;:<a href='066stream.mu.html#L2'>stream</a>:num [
<span id="L59" class="LineNr">59 </span> <span class="Constant">local-scope</span>
<span id="L60" class="LineNr">60 </span> <span class="Constant">load-ingredients</span>
<span id="L60" class="LineNr">60 </span> <span class="Constant">load-inputs</span>
<span id="L61" class="LineNr">61 </span> result, fail?, generator <span class="Special">&lt;-</span> <a href='068random.mu.html#L1'>random</a> generator
<span id="L62" class="LineNr">62 </span> <span class="muControl">return-if</span> fail?
<span id="L63" class="LineNr">63 </span> delta:num <span class="Special">&lt;-</span> subtract end, start

View File

@ -98,7 +98,7 @@ if ('onhashchange' in window) {
<span id="L33" class="LineNr"> 33 </span><span class="Delimiter">:(code)</span>
<span id="L34" class="LineNr"> 34 </span><span class="Normal">size_t</span> <a href='069hash.cc.html#L34'>hash</a><span class="Delimiter">(</span><span class="Normal">size_t</span> h<span class="Delimiter">,</span> reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L35" class="LineNr"> 35 </span> canonize<span class="Delimiter">(</span>r<span class="Delimiter">);</span>
<span id="L36" class="LineNr"> 36 </span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='027call_ingredient.cc.html#L174'>is_mu_text</a><span class="Delimiter">(</span>r<span class="Delimiter">))</span> <span class="Comment">// optimization</span>
<span id="L36" class="LineNr"> 36 </span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='027call_ingredient.cc.html#L177'>is_mu_text</a><span class="Delimiter">(</span>r<span class="Delimiter">))</span> <span class="Comment">// optimization</span>
<span id="L37" class="LineNr"> 37 </span> <span class="Conceal">¦</span> <span class="Identifier">return</span> <a href='069hash.cc.html#L68'>hash_mu_text</a><span class="Delimiter">(</span>h<span class="Delimiter">,</span> r<span class="Delimiter">);</span>
<span id="L38" class="LineNr"> 38 </span> <span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span>is_mu_address<span class="Delimiter">(</span>r<span class="Delimiter">))</span>
<span id="L39" class="LineNr"> 39 </span> <span class="Conceal">¦</span> <span class="Identifier">return</span> <a href='069hash.cc.html#L56'>hash_mu_address</a><span class="Delimiter">(</span>h<span class="Delimiter">,</span> r<span class="Delimiter">);</span>
@ -114,14 +114,14 @@ if ('onhashchange' in window) {
<span id="L49" class="LineNr"> 49 </span><span class="Delimiter">}</span>
<span id="L50" class="LineNr"> 50 </span>
<span id="L51" class="LineNr"> 51 </span><span class="Normal">size_t</span> <a href='069hash.cc.html#L51'>hash_mu_scalar</a><span class="Delimiter">(</span><span class="Normal">size_t</span> h<span class="Delimiter">,</span> <span class="Normal">const</span> reagent&amp; r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L52" class="LineNr"> 52 </span> <span class="Normal">double</span> input = is_literal<span class="Delimiter">(</span>r<span class="Delimiter">)</span> ? r<span class="Delimiter">.</span>value : <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> r<span class="Delimiter">.</span>value<span class="Delimiter">);</span>
<span id="L52" class="LineNr"> 52 </span> <span class="Normal">double</span> input = is_literal<span class="Delimiter">(</span>r<span class="Delimiter">)</span> ? r<span class="Delimiter">.</span>value : <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> r<span class="Delimiter">.</span>value<span class="Delimiter">);</span>
<span id="L53" class="LineNr"> 53 </span> <span class="Identifier">return</span> <a href='069hash.cc.html#L119'>hash_iter</a><span class="Delimiter">(</span>h<span class="Delimiter">,</span> <span class="Normal">static_cast</span>&lt;<span class="Normal">size_t</span>&gt;<span class="Delimiter">(</span>input<span class="Delimiter">));</span>
<span id="L54" class="LineNr"> 54 </span><span class="Delimiter">}</span>
<span id="L55" class="LineNr"> 55 </span>
<span id="L56" class="LineNr"> 56 </span><span class="Normal">size_t</span> <a href='069hash.cc.html#L56'>hash_mu_address</a><span class="Delimiter">(</span><span class="Normal">size_t</span> h<span class="Delimiter">,</span> reagent&amp; r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L57" class="LineNr"> 57 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>r<span class="Delimiter">.</span>value == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">0</span><span class="Delimiter">;</span>
<span id="L58" class="LineNr"> 58 </span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;location &quot;</span> &lt;&lt; r<span class="Delimiter">.</span>value &lt;&lt; <span class="Constant">&quot; is &quot;</span> &lt;&lt; no_scientific<span class="Delimiter">(</span><a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> r<span class="Delimiter">.</span>value<span class="Delimiter">))</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L59" class="LineNr"> 59 </span> r<span class="Delimiter">.</span><a href='010vm.cc.html#L65'>set_value</a><span class="Delimiter">(</span><a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> r<span class="Delimiter">.</span>value<span class="Delimiter">));</span>
<span id="L58" class="LineNr"> 58 </span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;location &quot;</span> &lt;&lt; r<span class="Delimiter">.</span>value &lt;&lt; <span class="Constant">&quot; is &quot;</span> &lt;&lt; no_scientific<span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> r<span class="Delimiter">.</span>value<span class="Delimiter">))</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L59" class="LineNr"> 59 </span> r<span class="Delimiter">.</span><a href='010vm.cc.html#L65'>set_value</a><span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> r<span class="Delimiter">.</span>value<span class="Delimiter">));</span>
<span id="L60" class="LineNr"> 60 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>r<span class="Delimiter">.</span>value != <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L61" class="LineNr"> 61 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;skipping refcount at &quot;</span> &lt;&lt; r<span class="Delimiter">.</span>value &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L62" class="LineNr"> 62 </span> <span class="Conceal">¦</span> r<span class="Delimiter">.</span><a href='010vm.cc.html#L65'>set_value</a><span class="Delimiter">(</span>r<span class="Delimiter">.</span>value+<span class="Constant">1</span><span class="Delimiter">);</span> <span class="Comment">// skip refcount</span>
@ -131,7 +131,7 @@ if ('onhashchange' in window) {
<span id="L66" class="LineNr"> 66 </span><span class="Delimiter">}</span>
<span id="L67" class="LineNr"> 67 </span>
<span id="L68" class="LineNr"> 68 </span><span class="Normal">size_t</span> <a href='069hash.cc.html#L68'>hash_mu_text</a><span class="Delimiter">(</span><span class="Normal">size_t</span> h<span class="Delimiter">,</span> <span class="Normal">const</span> reagent&amp; r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L69" class="LineNr"> 69 </span> string input = <a href='038new_text.cc.html#L143'>read_mu_text</a><span class="Delimiter">(</span><a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> r<span class="Delimiter">.</span>value<span class="Delimiter">));</span>
<span id="L69" class="LineNr"> 69 </span> string input = <a href='038new_text.cc.html#L143'>read_mu_text</a><span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> r<span class="Delimiter">.</span>value<span class="Delimiter">));</span>
<span id="L70" class="LineNr"> 70 </span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span> i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>input<span class="Delimiter">);</span> ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L71" class="LineNr"> 71 </span> <span class="Conceal">¦</span> h = <a href='069hash.cc.html#L119'>hash_iter</a><span class="Delimiter">(</span>h<span class="Delimiter">,</span> <span class="Normal">static_cast</span>&lt;<span class="Normal">size_t</span>&gt;<span class="Delimiter">(</span>input<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)));</span>
<span id="L72" class="LineNr"> 72 </span><span class="CommentedCode">//? cerr &lt;&lt; i &lt;&lt; &quot;: &quot; &lt;&lt; h &lt;&lt; '\n';</span>
@ -140,7 +140,7 @@ if ('onhashchange' in window) {
<span id="L75" class="LineNr"> 75 </span><span class="Delimiter">}</span>
<span id="L76" class="LineNr"> 76 </span>
<span id="L77" class="LineNr"> 77 </span><span class="Normal">size_t</span> <a href='069hash.cc.html#L77'>hash_mu_array</a><span class="Delimiter">(</span><span class="Normal">size_t</span> h<span class="Delimiter">,</span> <span class="Normal">const</span> reagent&amp; r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L78" class="LineNr"> 78 </span> <span class="Normal">int</span> size = <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> r<span class="Delimiter">.</span>value<span class="Delimiter">);</span>
<span id="L78" class="LineNr"> 78 </span> <span class="Normal">int</span> size = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> r<span class="Delimiter">.</span>value<span class="Delimiter">);</span>
<span id="L79" class="LineNr"> 79 </span> reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> elem = r<span class="Delimiter">;</span>
<span id="L80" class="LineNr"> 80 </span> <span class="Normal">delete</span> elem<span class="Delimiter">.</span>type<span class="Delimiter">;</span>
<span id="L81" class="LineNr"> 81 </span> elem<span class="Delimiter">.</span>type = <a href='032array.cc.html#L377'>copy_array_element</a><span class="Delimiter">(</span>r<span class="Delimiter">.</span>type<span class="Delimiter">);</span>

View File

@ -117,7 +117,7 @@ if ('onhashchange' in window) {
<span id="L55" class="LineNr"> 55 </span>
<span id="L56" class="LineNr"> 56 </span><span class="muRecipe">def</span> <a href='070table.mu.html#L56'>new-table</a> <a href='075channel.mu.html#L399'>capacity</a>:num<span class="muRecipe"> -&gt; </span>result:&amp;:<a href='070table.mu.html#L44'>table</a>:_key:_value [
<span id="L57" class="LineNr"> 57 </span> <span class="Constant">local-scope</span>
<span id="L58" class="LineNr"> 58 </span> <span class="Constant">load-ingredients</span>
<span id="L58" class="LineNr"> 58 </span> <span class="Constant">load-inputs</span>
<span id="L59" class="LineNr"> 59 </span> result <span class="Special">&lt;-</span> new <span class="Delimiter">{</span>(table _key _value): type<span class="Delimiter">}</span>
<span id="L60" class="LineNr"> 60 </span> data:&amp;:@:<a href='070table.mu.html#L50'>table-row</a>:_key:_value <span class="Special">&lt;-</span> new <span class="Delimiter">{</span>(table-row _key _value): type<span class="Delimiter">}</span>, <a href='075channel.mu.html#L399'>capacity</a>
<span id="L61" class="LineNr"> 61 </span> *result <span class="Special">&lt;-</span> merge <span class="Constant">0/length</span>, <a href='075channel.mu.html#L399'>capacity</a>, data
@ -127,7 +127,7 @@ if ('onhashchange' in window) {
<span id="L65" class="LineNr"> 65 </span><span class="Comment"># then we could handle conflicts simply by resizing the table</span>
<span id="L66" class="LineNr"> 66 </span><span class="muRecipe">def</span> put-index <a href='070table.mu.html#L44'>table</a>:&amp;:<a href='070table.mu.html#L44'>table</a>:_key:_value, key:_key, value:_value<span class="muRecipe"> -&gt; </span><a href='070table.mu.html#L44'>table</a>:&amp;:<a href='070table.mu.html#L44'>table</a>:_key:_value [
<span id="L67" class="LineNr"> 67 </span> <span class="Constant">local-scope</span>
<span id="L68" class="LineNr"> 68 </span> <span class="Constant">load-ingredients</span>
<span id="L68" class="LineNr"> 68 </span> <span class="Constant">load-inputs</span>
<span id="L69" class="LineNr"> 69 </span> hash:num <span class="Special">&lt;-</span> hash key
<span id="L70" class="LineNr"> 70 </span> hash <span class="Special">&lt;-</span> <a href='070table.mu.html#L103'>abs</a> hash
<span id="L71" class="LineNr"> 71 </span> <a href='075channel.mu.html#L399'>capacity</a>:num <span class="Special">&lt;-</span> get *table, <span class="Constant"><a href='075channel.mu.html#L399'>capacity</a>:offset</span>
@ -144,7 +144,7 @@ if ('onhashchange' in window) {
<span id="L82" class="LineNr"> 82 </span>
<span id="L83" class="LineNr"> 83 </span><span class="muRecipe">def</span> index <a href='070table.mu.html#L44'>table</a>:&amp;:<a href='070table.mu.html#L44'>table</a>:_key:_value, key:_key<span class="muRecipe"> -&gt; </span>result:_value, found?:bool [
<span id="L84" class="LineNr"> 84 </span> <span class="Constant">local-scope</span>
<span id="L85" class="LineNr"> 85 </span> <span class="Constant">load-ingredients</span>
<span id="L85" class="LineNr"> 85 </span> <span class="Constant">load-inputs</span>
<span id="L86" class="LineNr"> 86 </span> hash:num <span class="Special">&lt;-</span> hash key
<span id="L87" class="LineNr"> 87 </span> hash <span class="Special">&lt;-</span> <a href='070table.mu.html#L103'>abs</a> hash
<span id="L88" class="LineNr"> 88 </span> <a href='075channel.mu.html#L399'>capacity</a>:num <span class="Special">&lt;-</span> get *table, <span class="Constant"><a href='075channel.mu.html#L399'>capacity</a>:offset</span>
@ -164,7 +164,7 @@ if ('onhashchange' in window) {
<span id="L102" class="LineNr">102 </span>
<span id="L103" class="LineNr">103 </span><span class="muRecipe">def</span> <a href='070table.mu.html#L103'>abs</a> n:num<span class="muRecipe"> -&gt; </span>result:num [
<span id="L104" class="LineNr">104 </span> <span class="Constant">local-scope</span>
<span id="L105" class="LineNr">105 </span> <span class="Constant">load-ingredients</span>
<span id="L105" class="LineNr">105 </span> <span class="Constant">load-inputs</span>
<span id="L106" class="LineNr">106 </span> positive?:bool <span class="Special">&lt;-</span> greater-or-equal n,<span class="Constant"> 0</span>
<span id="L107" class="LineNr">107 </span> <span class="muControl">return-if</span> positive?, n
<span id="L108" class="LineNr">108 </span> result <span class="Special">&lt;-</span> multiply n,<span class="Constant"> -1</span>

View File

@ -336,18 +336,18 @@ if ('onhashchange' in window) {
<span id="L272" class="LineNr">272 </span> <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>addresses_copied<span class="Delimiter">,</span> in_address<span class="Delimiter">,</span> out<span class="Delimiter">);</span>
<span id="L273" class="LineNr">273 </span> reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> payload = canonized_in<span class="Delimiter">;</span>
<span id="L274" class="LineNr">274 </span> payload<span class="Delimiter">.</span>properties<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>pair&lt;string<span class="Delimiter">,</span> string_tree*&gt;<span class="Delimiter">(</span><span class="Constant">&quot;lookup&quot;</span><span class="Delimiter">,</span> <span class="Constant">NULL</span><span class="Delimiter">));</span>
<span id="L275" class="LineNr">275 </span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;recursing on payload &quot;</span> &lt;&lt; payload<span class="Delimiter">.</span>value &lt;&lt; <span class="Constant">' '</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>payload<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L275" class="LineNr">275 </span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;recursing on payload &quot;</span> &lt;&lt; payload<span class="Delimiter">.</span>value &lt;&lt; <span class="Constant">' '</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>payload<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L276" class="LineNr">276 </span> vector&lt;<span class="Normal">double</span>&gt; data = deep_copy<span class="Delimiter">(</span>payload<span class="Delimiter">,</span> addresses_copied<span class="Delimiter">,</span> tmp<span class="Delimiter">);</span>
<span id="L277" class="LineNr">277 </span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;deep-copy: writing result &quot;</span> &lt;&lt; out &lt;&lt; <span class="Constant">&quot;: &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>data<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L277" class="LineNr">277 </span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;deep-copy: writing result &quot;</span> &lt;&lt; out &lt;&lt; <span class="Constant">&quot;: &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>data<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L278" class="LineNr">278 </span> <span class="Comment">// HACK: write_memory interface isn't ideal for this situation; we need</span>
<span id="L279" class="LineNr">279 </span> <span class="Comment">// a temporary location to help copy the payload.</span>
<span id="L280" class="LineNr">280 </span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;deep-copy: writing temporary &quot;</span> &lt;&lt; tmp<span class="Delimiter">.</span>value &lt;&lt; <span class="Constant">&quot;: &quot;</span> &lt;&lt; out &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L281" class="LineNr">281 </span> <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> tmp<span class="Delimiter">.</span>value<span class="Delimiter">,</span> out<span class="Delimiter">);</span>
<span id="L282" class="LineNr">282 </span> payload<span class="Delimiter">.</span><a href='010vm.cc.html#L65'>set_value</a><span class="Delimiter">(</span>tmp<span class="Delimiter">.</span>value<span class="Delimiter">);</span> <span class="Comment">// now modified for output</span>
<span id="L283" class="LineNr">283 </span> vector&lt;<span class="Normal">double</span>&gt; old_data = read_memory<span class="Delimiter">(</span>payload<span class="Delimiter">);</span>
<span id="L284" class="LineNr">284 </span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;deep-copy: really writing to &quot;</span> &lt;&lt; payload<span class="Delimiter">.</span>value &lt;&lt; <span class="Constant">' '</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>payload<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; (old value &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>old_data<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; new value &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>data<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;)&quot;</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L284" class="LineNr">284 </span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;deep-copy: really writing to &quot;</span> &lt;&lt; payload<span class="Delimiter">.</span>value &lt;&lt; <span class="Constant">' '</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>payload<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; (old value &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>old_data<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; new value &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>data<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;)&quot;</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L285" class="LineNr">285 </span> write_memory<span class="Delimiter">(</span>payload<span class="Delimiter">,</span> data<span class="Delimiter">);</span>
<span id="L286" class="LineNr">286 </span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;deep-copy: output is &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>data<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L286" class="LineNr">286 </span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;deep-copy: output is &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>data<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L287" class="LineNr">287 </span> <span class="Identifier">return</span> out<span class="Delimiter">;</span>
<span id="L288" class="LineNr">288 </span><span class="Delimiter">}</span>
<span id="L289" class="LineNr">289 </span>
@ -357,7 +357,7 @@ if ('onhashchange' in window) {
<span id="L293" class="LineNr">293 </span> vector&lt;<span class="Normal">double</span>&gt; data = read_memory<span class="Delimiter">(</span>canonized_in<span class="Delimiter">);</span>
<span id="L294" class="LineNr">294 </span> out<span class="Delimiter">.</span>insert<span class="Delimiter">(</span>out<span class="Delimiter">.</span><a href='003trace.cc.html#L197'>end</a><span class="Delimiter">(),</span> data<span class="Delimiter">.</span>begin<span class="Delimiter">(),</span> data<span class="Delimiter">.</span><a href='003trace.cc.html#L197'>end</a><span class="Delimiter">());</span>
<span id="L295" class="LineNr">295 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span>Container_metadata<span class="Delimiter">,</span> canonized_in<span class="Delimiter">.</span>type<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
<span id="L296" class="LineNr">296 </span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;deep-copy: scanning for addresses in &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>data<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L296" class="LineNr">296 </span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;deep-copy: scanning for addresses in &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>data<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L297" class="LineNr">297 </span> <span class="Normal">const</span> container_metadata&amp; metadata = get<span class="Delimiter">(</span>Container_metadata<span class="Delimiter">,</span> canonized_in<span class="Delimiter">.</span>type<span class="Delimiter">);</span>
<span id="L298" class="LineNr">298 </span> <span class="Normal">for</span> <span class="Delimiter">(</span>map&lt;set&lt;tag_condition_info&gt;<span class="Delimiter">,</span> set&lt;address_element_info&gt; &gt;::const_iterator p = metadata<span class="Delimiter">.</span><a href='043space.cc.html#L82'>address</a><span class="Delimiter">.</span>begin<span class="Delimiter">();</span> p != metadata<span class="Delimiter">.</span><a href='043space.cc.html#L82'>address</a><span class="Delimiter">.</span><a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span> ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L299" class="LineNr">299 </span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!all_match<span class="Delimiter">(</span>data<span class="Delimiter">,</span> p<span class="Delimiter">-&gt;</span>first<span class="Delimiter">))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>

View File

@ -95,7 +95,7 @@ if ('onhashchange' in window) {
<span id="L31" class="LineNr"> 31 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;recipe-literal&quot;</span><span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">);</span>
<span id="L32" class="LineNr"> 32 </span><span class="Comment">// 'recipe' variables can store recipe-literal</span>
<span id="L33" class="LineNr"> 33 </span><a href='010vm.cc.html#L123'>type_ordinal</a> <a href='010vm.cc.html#L19'>recipe</a> = <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;recipe&quot;</span><span class="Delimiter">,</span> Next_type_ordinal++<span class="Delimiter">);</span>
<span id="L34" class="LineNr"> 34 </span><a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Type<span class="Delimiter">,</span> <a href='010vm.cc.html#L19'>recipe</a><span class="Delimiter">).</span>name = <span class="Constant">&quot;recipe&quot;</span><span class="Delimiter">;</span>
<span id="L34" class="LineNr"> 34 </span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Type<span class="Delimiter">,</span> <a href='010vm.cc.html#L19'>recipe</a><span class="Delimiter">).</span>name = <span class="Constant">&quot;recipe&quot;</span><span class="Delimiter">;</span>
<span id="L35" class="LineNr"> 35 </span>
<span id="L36" class="LineNr"> 36 </span><span class="Delimiter">:(after &quot;Begin <a href='042name.cc.html#L37'>transform_names</a> Ingredient Special-cases(ingredient, inst, caller)&quot;)</span>
<span id="L37" class="LineNr"> 37 </span><span class="Normal">if</span> <span class="Delimiter">(</span><a href='072recipe.cc.html#L47'>is_recipe_literal</a><span class="Delimiter">(</span>ingredient<span class="Delimiter">,</span> caller<span class="Delimiter">))</span> <span class="Delimiter">{</span>
@ -376,7 +376,7 @@ if ('onhashchange' in window) {
<span id="L312" class="LineNr">312 </span><span class="Delimiter">:(before &quot;End Matching Types For Literal(to)&quot;)</span>
<span id="L313" class="LineNr">313 </span><span class="Normal">if</span> <span class="Delimiter">(</span><a href='072recipe.cc.html#L277'>is_mu_recipe</a><span class="Delimiter">(</span>to<span class="Delimiter">))</span> <span class="Delimiter">{</span>
<span id="L314" class="LineNr">314 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> from<span class="Delimiter">.</span>value<span class="Delimiter">))</span> <span class="Delimiter">{</span>
<span id="L315" class="LineNr">315 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;trying to store <a href='010vm.cc.html#L19'>recipe</a> &quot;</span> &lt;&lt; from<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot; into &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>to<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; but there's no such recipe</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
<span id="L315" class="LineNr">315 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;trying to store <a href='010vm.cc.html#L19'>recipe</a> &quot;</span> &lt;&lt; from<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot; into &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>to<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; but there's no such recipe</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
<span id="L316" class="LineNr">316 </span> <span class="Conceal">¦</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
<span id="L317" class="LineNr">317 </span> <span class="Delimiter">}</span>
<span id="L318" class="LineNr">318 </span> <span class="Normal">const</span> recipe&amp; rrhs = get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> from<span class="Delimiter">.</span>value<span class="Delimiter">);</span>

View File

@ -446,7 +446,7 @@ if ('onhashchange' in window) {
<span id="L381" class="LineNr">381 </span><span class="traceContains">+error: f2: divide by zero in '3:num &lt;- divide-with-remainder 4, 0'</span>
<span id="L382" class="LineNr">382 </span><span class="traceAbsent">-error: f2: divide by zero in '4:num &lt;- divide-with-remainder 4, 0'</span>
<span id="L383" class="LineNr">383 </span>
<span id="L384" class="LineNr">384 </span><span class="Delimiter">:(after &quot;operator&lt;&lt;(ostream&amp; os, <a href='001help.cc.html#L258'>unused</a> end)&quot;)</span>
<span id="L384" class="LineNr">384 </span><span class="Delimiter">:(after &quot;operator&lt;&lt;(ostream&amp; os, <a href='001help.cc.html#L259'>unused</a> end)&quot;)</span>
<span id="L385" class="LineNr">385 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>Trace_stream &amp;&amp; Trace_stream<span class="Delimiter">-&gt;</span>curr_label == <span class="Constant">&quot;error&quot;</span> &amp;&amp; Current_routine<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L386" class="LineNr">386 </span> <span class="Conceal">¦</span> Current_routine<span class="Delimiter">-&gt;</span>state = <a href='073scheduler.cc.html#L42'>COMPLETED</a><span class="Delimiter">;</span>
<span id="L387" class="LineNr">387 </span> <span class="Delimiter">}</span>

View File

@ -154,8 +154,8 @@ if ('onhashchange' in window) {
<span id="L89" class="LineNr"> 89 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
<span id="L90" class="LineNr"> 90 </span><span class="Normal">case</span> WAIT_FOR_RESET_THEN_SET: <span class="Delimiter">{</span>
<span id="L91" class="LineNr"> 91 </span> <span class="Normal">int</span> loc = <span class="Normal">static_cast</span>&lt;<span class="Normal">int</span>&gt;<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">));</span>
<span id="L92" class="LineNr"> 92 </span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9998</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;wait: *&quot;</span> &lt;&lt; loc &lt;&lt; <span class="Constant">&quot; = &quot;</span> &lt;&lt; <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> loc<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L93" class="LineNr"> 93 </span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> loc<span class="Delimiter">)</span> == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L92" class="LineNr"> 92 </span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9998</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;wait: *&quot;</span> &lt;&lt; loc &lt;&lt; <span class="Constant">&quot; = &quot;</span> &lt;&lt; <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> loc<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L93" class="LineNr"> 93 </span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> loc<span class="Delimiter">)</span> == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L94" class="LineNr"> 94 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9998</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;location &quot;</span> &lt;&lt; loc &lt;&lt; <span class="Constant">&quot; is already 0; setting&quot;</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L95" class="LineNr"> 95 </span> <span class="Conceal">¦</span> <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> loc<span class="Delimiter">,</span> <span class="Constant">1</span><span class="Delimiter">);</span>
<span id="L96" class="LineNr"> 96 </span> <span class="Conceal">¦</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
@ -186,7 +186,7 @@ if ('onhashchange' in window) {
<span id="L121" class="LineNr">121 </span><span class="Normal">case</span> RESET: <span class="Delimiter">{</span>
<span id="L122" class="LineNr">122 </span> <span class="Normal">int</span> loc = <span class="Normal">static_cast</span>&lt;<span class="Normal">int</span>&gt;<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">));</span>
<span id="L123" class="LineNr">123 </span> <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> loc<span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">);</span>
<span id="L124" class="LineNr">124 </span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9998</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;reset: *&quot;</span> &lt;&lt; loc &lt;&lt; <span class="Constant">&quot; = &quot;</span> &lt;&lt; <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> loc<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L124" class="LineNr">124 </span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9998</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;reset: *&quot;</span> &lt;&lt; loc &lt;&lt; <span class="Constant">&quot; = &quot;</span> &lt;&lt; <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> loc<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L125" class="LineNr">125 </span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L126" class="LineNr">126 </span><span class="Delimiter">}</span>
<span id="L127" class="LineNr">127 </span>
@ -196,7 +196,7 @@ if ('onhashchange' in window) {
<span id="L131" class="LineNr">131 </span><span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span> i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>Routines<span class="Delimiter">);</span> ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L132" class="LineNr">132 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>Routines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)-&gt;</span>state != WAITING<span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
<span id="L133" class="LineNr">133 </span> <span class="Normal">int</span> loc = Routines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)-&gt;</span>waiting_on_location<span class="Delimiter">;</span>
<span id="L134" class="LineNr">134 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>loc &amp;&amp; <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> loc<span class="Delimiter">)</span> == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L134" class="LineNr">134 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>loc &amp;&amp; <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> loc<span class="Delimiter">)</span> == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L135" class="LineNr">135 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;schedule&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;waking up routine &quot;</span> &lt;&lt; Routines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)-&gt;</span>id &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L136" class="LineNr">136 </span> <span class="Conceal">¦</span> <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> loc<span class="Delimiter">,</span> <span class="Constant">1</span><span class="Delimiter">);</span>
<span id="L137" class="LineNr">137 </span> <span class="Conceal">¦</span> Routines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)-&gt;</span>state = <a href='073scheduler.cc.html#L41'>RUNNING</a><span class="Delimiter">;</span>

View File

@ -74,9 +74,9 @@ if ('onhashchange' in window) {
<span id="L10" class="LineNr"> 10 </span><span class="Comment"># addresses from being shared between routines, and therefore eliminates all</span>
<span id="L11" class="LineNr"> 11 </span><span class="Comment"># possibility of race conditions.</span>
<span id="L12" class="LineNr"> 12 </span><span class="Comment">#</span>
<span id="L13" class="LineNr"> 13 </span><span class="Comment"># There's still a narrow window for race conditions: the ingredients passed in</span>
<span id="L13" class="LineNr"> 13 </span><span class="Comment"># There's still a narrow window for race conditions: the inputs passed in</span>
<span id="L14" class="LineNr"> 14 </span><span class="Comment"># to 'start-running'. Pass only channels into routines and you should be fine.</span>
<span id="L15" class="LineNr"> 15 </span><span class="Comment"># Any other mutable ingredients will require locks.</span>
<span id="L15" class="LineNr"> 15 </span><span class="Comment"># Any other mutable inputs will require locks.</span>
<span id="L16" class="LineNr"> 16 </span>
<span id="L17" class="LineNr"> 17 </span><span class="muScenario">scenario</span> channel [
<span id="L18" class="LineNr"> 18 </span> run [
@ -114,7 +114,7 @@ if ('onhashchange' in window) {
<span id="L50" class="LineNr"> 50 </span>
<span id="L51" class="LineNr"> 51 </span><span class="muRecipe">def</span> <a href='075channel.mu.html#L51'>new-channel</a> <a href='075channel.mu.html#L399'>capacity</a>:num<span class="muRecipe"> -&gt; </span>in:&amp;:<a href='075channel.mu.html#L43'>source</a>:_elem, out:&amp;:<a href='075channel.mu.html#L47'>sink</a>:_elem [
<span id="L52" class="LineNr"> 52 </span> <span class="Constant">local-scope</span>
<span id="L53" class="LineNr"> 53 </span> <span class="Constant">load-ingredients</span>
<span id="L53" class="LineNr"> 53 </span> <span class="Constant">load-inputs</span>
<span id="L54" class="LineNr"> 54 </span> result:&amp;:channel:_elem <span class="Special">&lt;-</span> new <span class="Delimiter">{</span>(channel _elem): type<span class="Delimiter">}</span>
<span id="L55" class="LineNr"> 55 </span> *result <span class="Special">&lt;-</span> put *result, <span class="Constant">first-full:offset</span>,<span class="Constant"> 0</span>
<span id="L56" class="LineNr"> 56 </span> *result <span class="Special">&lt;-</span> put *result, <span class="Constant">first-free:offset</span>,<span class="Constant"> 0</span>
@ -130,7 +130,7 @@ if ('onhashchange' in window) {
<span id="L66" class="LineNr"> 66 </span><span class="Comment"># write a value to a channel</span>
<span id="L67" class="LineNr"> 67 </span><span class="muRecipe">def</span> <a href='075channel.mu.html#L67'>write</a> out:&amp;:<a href='075channel.mu.html#L47'>sink</a>:_elem, val:_elem<span class="muRecipe"> -&gt; </span>out:&amp;:<a href='075channel.mu.html#L47'>sink</a>:_elem [
<span id="L68" class="LineNr"> 68 </span> <span class="Constant">local-scope</span>
<span id="L69" class="LineNr"> 69 </span> <span class="Constant">load-ingredients</span>
<span id="L69" class="LineNr"> 69 </span> <span class="Constant">load-inputs</span>
<span id="L70" class="LineNr"> 70 </span> assert out, <span class="Constant">[write to null channel]</span>
<span id="L71" class="LineNr"> 71 </span> chan:&amp;:channel:_elem <span class="Special">&lt;-</span> get *out, <span class="Constant">chan:offset</span>
<span id="L72" class="LineNr"> 72 </span><span class="Constant"> <a href='075channel.mu.html#L72'>&lt;channel-write-initial&gt;</a></span>
@ -176,7 +176,7 @@ if ('onhashchange' in window) {
<span id="L112" class="LineNr">112 </span><span class="Comment"># read a value from a channel</span>
<span id="L113" class="LineNr">113 </span><span class="muRecipe">def</span> read in:&amp;:<a href='075channel.mu.html#L43'>source</a>:_elem<span class="muRecipe"> -&gt; </span>result:_elem, eof?:bool, in:&amp;:<a href='075channel.mu.html#L43'>source</a>:_elem [
<span id="L114" class="LineNr">114 </span> <span class="Constant">local-scope</span>
<span id="L115" class="LineNr">115 </span> <span class="Constant">load-ingredients</span>
<span id="L115" class="LineNr">115 </span> <span class="Constant">load-inputs</span>
<span id="L116" class="LineNr">116 </span> assert in, <span class="Constant">[read on null channel]</span>
<span id="L117" class="LineNr">117 </span> eof? <span class="Special">&lt;-</span> copy <span class="Constant">0/false</span> <span class="Comment"># default result</span>
<span id="L118" class="LineNr">118 </span> chan:&amp;:channel:_elem <span class="Special">&lt;-</span> get *in, <span class="Constant">chan:offset</span>
@ -375,7 +375,7 @@ if ('onhashchange' in window) {
<span id="L311" class="LineNr">311 </span>
<span id="L312" class="LineNr">312 </span><span class="muRecipe">def</span> <a href='075channel.mu.html#L312'>clear</a> in:&amp;:<a href='075channel.mu.html#L43'>source</a>:_elem<span class="muRecipe"> -&gt; </span>in:&amp;:<a href='075channel.mu.html#L43'>source</a>:_elem [
<span id="L313" class="LineNr">313 </span> <span class="Constant">local-scope</span>
<span id="L314" class="LineNr">314 </span> <span class="Constant">load-ingredients</span>
<span id="L314" class="LineNr">314 </span> <span class="Constant">load-inputs</span>
<span id="L315" class="LineNr">315 </span> chan:&amp;:channel:_elem <span class="Special">&lt;-</span> get *in, <span class="Constant">chan:offset</span>
<span id="L316" class="LineNr">316 </span> <span class="Delimiter">{</span>
<span id="L317" class="LineNr">317 </span> <span class="Conceal">¦</span> empty?:bool <span class="Special">&lt;-</span> <a href='075channel.mu.html#L370'>channel-empty?</a> chan
@ -397,13 +397,13 @@ if ('onhashchange' in window) {
<span id="L333" class="LineNr">333 </span><span class="Comment"># both routines can modify the 'closed?' bit, but they can only ever set it, so this is a benign race</span>
<span id="L334" class="LineNr">334 </span><span class="muRecipe">def</span> close x:&amp;:<a href='075channel.mu.html#L43'>source</a>:_elem<span class="muRecipe"> -&gt; </span>x:&amp;:<a href='075channel.mu.html#L43'>source</a>:_elem [
<span id="L335" class="LineNr">335 </span> <span class="Constant">local-scope</span>
<span id="L336" class="LineNr">336 </span> <span class="Constant">load-ingredients</span>
<span id="L336" class="LineNr">336 </span> <span class="Constant">load-inputs</span>
<span id="L337" class="LineNr">337 </span> chan:&amp;:channel:_elem <span class="Special">&lt;-</span> get *x, <span class="Constant">chan:offset</span>
<span id="L338" class="LineNr">338 </span> *chan <span class="Special">&lt;-</span> put *chan, <span class="Constant">closed?:offset</span>, <span class="Constant">1/true</span>
<span id="L339" class="LineNr">339 </span>]
<span id="L340" class="LineNr">340 </span><span class="muRecipe">def</span> close x:&amp;:<a href='075channel.mu.html#L47'>sink</a>:_elem<span class="muRecipe"> -&gt; </span>x:&amp;:<a href='075channel.mu.html#L47'>sink</a>:_elem [
<span id="L341" class="LineNr">341 </span> <span class="Constant">local-scope</span>
<span id="L342" class="LineNr">342 </span> <span class="Constant">load-ingredients</span>
<span id="L342" class="LineNr">342 </span> <span class="Constant">load-inputs</span>
<span id="L343" class="LineNr">343 </span> chan:&amp;:channel:_elem <span class="Special">&lt;-</span> get *x, <span class="Constant">chan:offset</span>
<span id="L344" class="LineNr">344 </span> *chan <span class="Special">&lt;-</span> put *chan, <span class="Constant">closed?:offset</span>, <span class="Constant">1/true</span>
<span id="L345" class="LineNr">345 </span>]
@ -433,7 +433,7 @@ if ('onhashchange' in window) {
<span id="L369" class="LineNr">369 </span><span class="Comment"># An empty channel has first-free and first-full both at the same value.</span>
<span id="L370" class="LineNr">370 </span><span class="muRecipe">def</span> <a href='075channel.mu.html#L370'>channel-empty?</a> chan:&amp;:channel:_elem<span class="muRecipe"> -&gt; </span>result:bool [
<span id="L371" class="LineNr">371 </span> <span class="Constant">local-scope</span>
<span id="L372" class="LineNr">372 </span> <span class="Constant">load-ingredients</span>
<span id="L372" class="LineNr">372 </span> <span class="Constant">load-inputs</span>
<span id="L373" class="LineNr">373 </span> <span class="Comment"># return chan.first-full == chan.first-free</span>
<span id="L374" class="LineNr">374 </span> full:num <span class="Special">&lt;-</span> get *chan, <span class="Constant">first-full:offset</span>
<span id="L375" class="LineNr">375 </span> free:num <span class="Special">&lt;-</span> get *chan, <span class="Constant">first-free:offset</span>
@ -444,7 +444,7 @@ if ('onhashchange' in window) {
<span id="L380" class="LineNr">380 </span><span class="Comment"># (Other alternatives: <a href="https://www.snellman.net/blog/archive/2016-12-13-ring-buffers">https://www.snellman.net/blog/archive/2016-12-13-ring-buffers</a>)</span>
<span id="L381" class="LineNr">381 </span><span class="muRecipe">def</span> <a href='075channel.mu.html#L381'>channel-full?</a> chan:&amp;:channel:_elem<span class="muRecipe"> -&gt; </span>result:bool [
<span id="L382" class="LineNr">382 </span> <span class="Constant">local-scope</span>
<span id="L383" class="LineNr">383 </span> <span class="Constant">load-ingredients</span>
<span id="L383" class="LineNr">383 </span> <span class="Constant">load-inputs</span>
<span id="L384" class="LineNr">384 </span> <span class="Comment"># tmp = chan.first-free + 1</span>
<span id="L385" class="LineNr">385 </span> tmp:num <span class="Special">&lt;-</span> get *chan, <span class="Constant">first-free:offset</span>
<span id="L386" class="LineNr">386 </span> tmp <span class="Special">&lt;-</span> add tmp,<span class="Constant"> 1</span>
@ -462,7 +462,7 @@ if ('onhashchange' in window) {
<span id="L398" class="LineNr">398 </span>
<span id="L399" class="LineNr">399 </span><span class="muRecipe">def</span> <a href='075channel.mu.html#L399'>capacity</a> chan:&amp;:channel:_elem<span class="muRecipe"> -&gt; </span>result:num [
<span id="L400" class="LineNr">400 </span> <span class="Constant">local-scope</span>
<span id="L401" class="LineNr">401 </span> <span class="Constant">load-ingredients</span>
<span id="L401" class="LineNr">401 </span> <span class="Constant">load-inputs</span>
<span id="L402" class="LineNr">402 </span> q:&amp;:@:_elem <span class="Special">&lt;-</span> get *chan, <span class="Constant">data:offset</span>
<span id="L403" class="LineNr">403 </span> result <span class="Special">&lt;-</span> length *q
<span id="L404" class="LineNr">404 </span>]
@ -471,7 +471,7 @@ if ('onhashchange' in window) {
<span id="L407" class="LineNr">407 </span>
<span id="L408" class="LineNr">408 </span><span class="muRecipe">def</span> <a href='075channel.mu.html#L408'>buffer-lines</a> in:&amp;:<a href='075channel.mu.html#L43'>source</a>:char, buffered-out:&amp;:<a href='075channel.mu.html#L47'>sink</a>:char<span class="muRecipe"> -&gt; </span>buffered-out:&amp;:<a href='075channel.mu.html#L47'>sink</a>:char, in:&amp;:<a href='075channel.mu.html#L43'>source</a>:char [
<span id="L409" class="LineNr">409 </span> <span class="Constant">local-scope</span>
<span id="L410" class="LineNr">410 </span> <span class="Constant">load-ingredients</span>
<span id="L410" class="LineNr">410 </span> <span class="Constant">load-inputs</span>
<span id="L411" class="LineNr">411 </span> <span class="Comment"># repeat forever</span>
<span id="L412" class="LineNr">412 </span> eof?:bool <span class="Special">&lt;-</span> copy <span class="Constant">0/false</span>
<span id="L413" class="LineNr">413 </span> <span class="Delimiter">{</span>
@ -570,7 +570,7 @@ if ('onhashchange' in window) {
<span id="L506" class="LineNr">506 </span>
<span id="L507" class="LineNr">507 </span><span class="muRecipe">def</span> <a href='075channel.mu.html#L507'>drain</a> <a href='075channel.mu.html#L43'>source</a>:&amp;:<a href='075channel.mu.html#L43'>source</a>:char<span class="muRecipe"> -&gt; </span>result:text, <a href='075channel.mu.html#L43'>source</a>:&amp;:<a href='075channel.mu.html#L43'>source</a>:char [
<span id="L508" class="LineNr">508 </span> <span class="Constant">local-scope</span>
<span id="L509" class="LineNr">509 </span> <span class="Constant">load-ingredients</span>
<span id="L509" class="LineNr">509 </span> <span class="Constant">load-inputs</span>
<span id="L510" class="LineNr">510 </span> buf:&amp;:<a href='061text.mu.html#L120'>buffer</a>:char <span class="Special">&lt;-</span> <a href='061text.mu.html#L125'>new-buffer</a><span class="Constant"> 30</span>
<span id="L511" class="LineNr">511 </span> <span class="Delimiter">{</span>
<span id="L512" class="LineNr">512 </span> <span class="Conceal">¦</span> c:char, done?:bool <span class="Special">&lt;-</span> read <a href='075channel.mu.html#L43'>source</a>

View File

@ -204,191 +204,221 @@ if ('onhashchange' in window) {
<span id="L140" class="LineNr">140 </span><span class="Comment">//: save the slice of current call stack until the 'call-with-continuation-mark'</span>
<span id="L141" class="LineNr">141 </span><span class="Comment">//: call, and return it as the result.</span>
<span id="L142" class="LineNr">142 </span><span class="Comment">//: todo: implement delimited continuations in Mu's memory</span>
<span id="L143" class="LineNr">143 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
<span id="L144" class="LineNr">144 </span>map&lt;<span class="Normal">long</span> <span class="Normal">long</span> <span class="Normal">int</span><span class="Delimiter">,</span> call_stack&gt; Delimited_continuation<span class="Delimiter">;</span>
<span id="L145" class="LineNr">145 </span><span class="Normal">long</span> <span class="Normal">long</span> <span class="Normal">int</span> Next_delimited_continuation_id = <span class="Constant">1</span><span class="Delimiter">;</span> <span class="Comment">// 0 is null just like an address</span>
<span id="L146" class="LineNr">146 </span><span class="Delimiter">:(before &quot;End Reset&quot;)</span>
<span id="L147" class="LineNr">147 </span>Delimited_continuation<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
<span id="L148" class="LineNr">148 </span>Next_delimited_continuation_id = <span class="Constant">1</span><span class="Delimiter">;</span>
<span id="L149" class="LineNr">149 </span>
<span id="L150" class="LineNr">150 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
<span id="L151" class="LineNr">151 </span>RETURN_CONTINUATION_UNTIL_MARK<span class="Delimiter">,</span>
<span id="L152" class="LineNr">152 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
<span id="L153" class="LineNr">153 </span>Recipe_ordinal[<span class="Constant">&quot;return-continuation-until-mark&quot;</span>] = RETURN_CONTINUATION_UNTIL_MARK<span class="Delimiter">;</span>
<span id="L154" class="LineNr">154 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
<span id="L155" class="LineNr">155 </span><span class="Normal">case</span> RETURN_CONTINUATION_UNTIL_MARK: <span class="Delimiter">{</span>
<span id="L156" class="LineNr">156 </span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L157" class="LineNr">157 </span><span class="Delimiter">}</span>
<span id="L158" class="LineNr">158 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
<span id="L159" class="LineNr">159 </span><span class="Normal">case</span> RETURN_CONTINUATION_UNTIL_MARK: <span class="Delimiter">{</span>
<span id="L160" class="LineNr">160 </span> <span class="Comment">// first clear any existing ingredients, to isolate the creation of the</span>
<span id="L161" class="LineNr">161 </span> <span class="Comment">// continuation from its calls</span>
<span id="L162" class="LineNr">162 </span> Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span>front<span class="Delimiter">().</span>ingredient_atoms<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
<span id="L163" class="LineNr">163 </span> Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span>front<span class="Delimiter">().</span>next_ingredient_to_process = <span class="Constant">0</span><span class="Delimiter">;</span>
<span id="L164" class="LineNr">164 </span> <span class="Comment">// copy the current call stack until the most recent marked call</span>
<span id="L165" class="LineNr">165 </span> call_stack::iterator find_base_of_continuation<span class="Delimiter">(</span>call_stack&amp; c<span class="Delimiter">);</span> <span class="Comment">// manual prototype containing '::'</span>
<span id="L166" class="LineNr">166 </span> call_stack::iterator base = find_base_of_continuation<span class="Delimiter">(</span>Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">);</span>
<span id="L167" class="LineNr">167 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>base == Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span><a href='003trace.cc.html#L197'>end</a><span class="Delimiter">())</span> <span class="Delimiter">{</span>
<span id="L168" class="LineNr">168 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span><a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;couldn't find a 'call-with-continuation-mark' to return to</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
<span id="L169" class="LineNr">169 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span><a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;call stack:</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L170" class="LineNr">170 </span> <span class="Conceal">¦</span> <span class="Normal">for</span> <span class="Delimiter">(</span>call_stack::iterator p = Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span>begin<span class="Delimiter">();</span> p != Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span><a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span> ++p<span class="Delimiter">)</span>
<span id="L171" class="LineNr">171 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span><a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot; &quot;</span> &lt;&lt; get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> p<span class="Delimiter">-&gt;</span>running_recipe<span class="Delimiter">).</span>name &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L172" class="LineNr">172 </span> <span class="Conceal">¦</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L173" class="LineNr">173 </span> <span class="Delimiter">}</span>
<span id="L174" class="LineNr">174 </span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;creating continuation &quot;</span> &lt;&lt; Next_delimited_continuation_id &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L175" class="LineNr">175 </span> Delimited_continuation[Next_delimited_continuation_id] = call_stack<span class="Delimiter">(</span>Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span>begin<span class="Delimiter">(),</span> base<span class="Delimiter">);</span>
<span id="L176" class="LineNr">176 </span> <span class="Normal">while</span> <span class="Delimiter">(</span>Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span>begin<span class="Delimiter">()</span> != base<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L177" class="LineNr">177 </span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>Trace_stream<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L178" class="LineNr">178 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> --Trace_stream<span class="Delimiter">-&gt;</span>callstack_depth<span class="Delimiter">;</span>
<span id="L179" class="LineNr">179 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> assert<span class="Delimiter">(</span>Trace_stream<span class="Delimiter">-&gt;</span>callstack_depth &gt;= <span class="Constant">0</span><span class="Delimiter">);</span>
<span id="L180" class="LineNr">180 </span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>
<span id="L181" class="LineNr">181 </span> <span class="Conceal">¦</span> Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span>pop_front<span class="Delimiter">();</span>
<span id="L182" class="LineNr">182 </span> <span class="Delimiter">}</span>
<span id="L183" class="LineNr">183 </span> <span class="Comment">// return it as the result of the marked call</span>
<span id="L184" class="LineNr">184 </span> products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
<span id="L185" class="LineNr">185 </span> products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span>Next_delimited_continuation_id<span class="Delimiter">);</span>
<span id="L186" class="LineNr">186 </span> <span class="Comment">// return any other ingredients passed in</span>
<span id="L187" class="LineNr">187 </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#L197'>end</a><span class="Delimiter">(),</span> inserter<span class="Delimiter">(</span>products<span class="Delimiter">,</span> products<span class="Delimiter">.</span><a href='003trace.cc.html#L197'>end</a><span class="Delimiter">()));</span>
<span id="L188" class="LineNr">188 </span> ++Next_delimited_continuation_id<span class="Delimiter">;</span>
<span id="L189" class="LineNr">189 </span> <span class="Identifier">break</span><span class="Delimiter">;</span> <span class="Comment">// continue to process rest of marked call</span>
<span id="L190" class="LineNr">190 </span><span class="Delimiter">}</span>
<span id="L191" class="LineNr">191 </span>
<span id="L192" class="LineNr">192 </span><span class="Delimiter">:(code)</span>
<span id="L193" class="LineNr">193 </span>call_stack::iterator find_base_of_continuation<span class="Delimiter">(</span>call_stack&amp; c<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L194" class="LineNr">194 </span> <span class="Normal">for</span> <span class="Delimiter">(</span>call_stack::iterator p = c<span class="Delimiter">.</span>begin<span class="Delimiter">();</span> p != c<span class="Delimiter">.</span><a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span> ++p<span class="Delimiter">)</span>
<span id="L195" class="LineNr">195 </span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>p<span class="Delimiter">-&gt;</span>is_base_of_continuation<span class="Delimiter">)</span> <span class="Identifier">return</span> p<span class="Delimiter">;</span>
<span id="L196" class="LineNr">196 </span> <span class="Identifier">return</span> c<span class="Delimiter">.</span><a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L197" class="LineNr">197 </span><span class="Delimiter">}</span>
<span id="L198" class="LineNr">198 </span>
<span id="L199" class="LineNr">199 </span><span class="Comment">//: overload 'call' for continuations</span>
<span id="L200" class="LineNr">200 </span><span class="Delimiter">:(after &quot;Begin Call&quot;)</span>
<span id="L201" class="LineNr">201 </span><span class="Normal">if</span> <span class="Delimiter">(</span><a href='026call.cc.html#L87'>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>type<span class="Delimiter">-&gt;</span>atom
<span id="L202" class="LineNr">202 </span> <span class="Conceal">¦</span> &amp;&amp; <a href='026call.cc.html#L87'>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>type<span class="Delimiter">-&gt;</span>name == <span class="Constant">&quot;continuation&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L203" class="LineNr">203 </span> <span class="Comment">// copy multiple calls on to current call stack</span>
<span id="L204" class="LineNr">204 </span> assert<span class="Delimiter">(</span>scalar<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)));</span>
<span id="L205" class="LineNr">205 </span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;calling continuation &quot;</span> &lt;&lt; ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L206" class="LineNr">206 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>Delimited_continuation<span class="Delimiter">.</span>find<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> == Delimited_continuation<span class="Delimiter">.</span><a href='003trace.cc.html#L197'>end</a><span class="Delimiter">())</span>
<span id="L207" class="LineNr">207 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span><a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;no such delimited continuation &quot;</span> &lt;&lt; <a href='026call.cc.html#L87'>current_instruction</a><span class="Delimiter">().</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>original_string &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L208" class="LineNr">208 </span> <span class="Normal">const</span> call_stack&amp; new_calls = Delimited_continuation[ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)</span>]<span class="Delimiter">;</span>
<span id="L209" class="LineNr">209 </span> <span class="Normal">const</span> call&amp; caller = <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>new_calls<span class="Delimiter">)</span> &gt; <span class="Constant">1</span><span class="Delimiter">)</span> ? *++new_calls<span class="Delimiter">.</span>begin<span class="Delimiter">()</span> : Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span>front<span class="Delimiter">();</span>
<span id="L210" class="LineNr">210 </span> <span class="Normal">for</span> <span class="Delimiter">(</span>call_stack::const_reverse_iterator p = new_calls<span class="Delimiter">.</span>rbegin<span class="Delimiter">();</span> p != new_calls<span class="Delimiter">.</span>rend<span class="Delimiter">();</span> ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L211" class="LineNr">211 </span> <span class="Conceal">¦</span> Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span>push_front<span class="Delimiter">(</span>*p<span class="Delimiter">);</span>
<span id="L212" class="LineNr">212 </span> <span class="Conceal">¦</span> <span class="Comment">// ensure that the presence of a continuation keeps its stack frames from being reclaimed</span>
<span id="L213" class="LineNr">213 </span> <span class="Conceal">¦</span> <span class="Normal">int</span> space_address = Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span>front<span class="Delimiter">().</span>default_space<span class="Delimiter">;</span>
<span id="L214" class="LineNr">214 </span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>space_address != <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L215" class="LineNr">215 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">int</span> refcount = <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> space_address<span class="Delimiter">);</span>
<span id="L216" class="LineNr">216 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;incrementing refcount of &quot;</span> &lt;&lt; space_address &lt;&lt; <span class="Constant">&quot;: &quot;</span> &lt;&lt; refcount &lt;&lt; <span class="Constant">&quot; -&gt; &quot;</span> &lt;&lt; refcount+<span class="Constant">1</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L217" class="LineNr">217 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> space_address<span class="Delimiter">,</span> refcount+<span class="Constant">1</span><span class="Delimiter">);</span>
<span id="L218" class="LineNr">218 </span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>
<span id="L219" class="LineNr">219 </span> <span class="Delimiter">}</span>
<span id="L220" class="LineNr">220 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>Trace_stream<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L221" class="LineNr">221 </span> <span class="Conceal">¦</span> Trace_stream<span class="Delimiter">-&gt;</span>callstack_depth += <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>new_calls<span class="Delimiter">);</span>
<span id="L222" class="LineNr">222 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;trace&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;calling delimited continuation; growing callstack depth to &quot;</span> &lt;&lt; Trace_stream<span class="Delimiter">-&gt;</span>callstack_depth &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L223" class="LineNr">223 </span> <span class="Conceal">¦</span> assert<span class="Delimiter">(</span>Trace_stream<span class="Delimiter">-&gt;</span>callstack_depth &lt; <span class="Constant">9000</span><span class="Delimiter">);</span> <span class="Comment">// 9998-101 plus cushion</span>
<span id="L224" class="LineNr">224 </span> <span class="Delimiter">}</span>
<span id="L225" class="LineNr">225 </span> ingredients<span class="Delimiter">.</span>erase<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>begin<span class="Delimiter">());</span> <span class="Comment">// drop the callee</span>
<span id="L226" class="LineNr">226 </span> finish_call_housekeeping<span class="Delimiter">(</span><a href='026call.cc.html#L86'>to_instruction</a><span class="Delimiter">(</span>caller<span class="Delimiter">),</span> ingredients<span class="Delimiter">);</span>
<span id="L227" class="LineNr">227 </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#L197'>end</a><span class="Delimiter">(),</span> inserter<span class="Delimiter">(</span>products<span class="Delimiter">,</span> products<span class="Delimiter">.</span>begin<span class="Delimiter">()));</span>
<span id="L228" class="LineNr">228 </span> <span class="Identifier">break</span><span class="Delimiter">;</span> <span class="Comment">// record results of resuming 'return-continuation-until-mark' instruction</span>
<span id="L229" class="LineNr">229 </span><span class="Delimiter">}</span>
<span id="L230" class="LineNr">230 </span>
<span id="L231" class="LineNr">231 </span><span class="Comment">//: Ensure that the presence of a continuation keeps its stack frames from being reclaimed.</span>
<span id="L232" class="LineNr">232 </span>
<span id="L233" class="LineNr">233 </span><span class="Delimiter">:(scenario continuations_preserve_local_scopes)</span>
<span id="L234" class="LineNr">234 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
<span id="L143" class="LineNr">143 </span><span class="Delimiter">:(before &quot;End Types&quot;)</span>
<span id="L144" class="LineNr">144 </span><span class="Normal">struct</span> delimited_continuation <span class="Delimiter">{</span>
<span id="L145" class="LineNr">145 </span> call_stack frames<span class="Delimiter">;</span>
<span id="L146" class="LineNr">146 </span> <span class="Normal">int</span> nrefs<span class="Delimiter">;</span>
<span id="L147" class="LineNr">147 </span> delimited_continuation<span class="Delimiter">(</span>call_stack::iterator begin<span class="Delimiter">,</span> call_stack::iterator <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">)</span> :frames<span class="Delimiter">(</span>call_stack<span class="Delimiter">(</span>begin<span class="Delimiter">,</span> <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">)),</span> nrefs<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{}</span>
<span id="L148" class="LineNr">148 </span><span class="Delimiter">};</span>
<span id="L149" class="LineNr">149 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
<span id="L150" class="LineNr">150 </span>map&lt;<span class="Normal">long</span> <span class="Normal">long</span> <span class="Normal">int</span><span class="Delimiter">,</span> delimited_continuation&gt; Delimited_continuation<span class="Delimiter">;</span>
<span id="L151" class="LineNr">151 </span><span class="Normal">long</span> <span class="Normal">long</span> <span class="Normal">int</span> Next_delimited_continuation_id = <span class="Constant">1</span><span class="Delimiter">;</span> <span class="Comment">// 0 is null just like an address</span>
<span id="L152" class="LineNr">152 </span><span class="Delimiter">:(before &quot;End Reset&quot;)</span>
<span id="L153" class="LineNr">153 </span>Delimited_continuation<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
<span id="L154" class="LineNr">154 </span>Next_delimited_continuation_id = <span class="Constant">1</span><span class="Delimiter">;</span>
<span id="L155" class="LineNr">155 </span>
<span id="L156" class="LineNr">156 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
<span id="L157" class="LineNr">157 </span>RETURN_CONTINUATION_UNTIL_MARK<span class="Delimiter">,</span>
<span id="L158" class="LineNr">158 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
<span id="L159" class="LineNr">159 </span>Recipe_ordinal[<span class="Constant">&quot;return-continuation-until-mark&quot;</span>] = RETURN_CONTINUATION_UNTIL_MARK<span class="Delimiter">;</span>
<span id="L160" class="LineNr">160 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
<span id="L161" class="LineNr">161 </span><span class="Normal">case</span> RETURN_CONTINUATION_UNTIL_MARK: <span class="Delimiter">{</span>
<span id="L162" class="LineNr">162 </span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L163" class="LineNr">163 </span><span class="Delimiter">}</span>
<span id="L164" class="LineNr">164 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
<span id="L165" class="LineNr">165 </span><span class="Normal">case</span> RETURN_CONTINUATION_UNTIL_MARK: <span class="Delimiter">{</span>
<span id="L166" class="LineNr">166 </span> <span class="Comment">// first clear any existing ingredients, to isolate the creation of the</span>
<span id="L167" class="LineNr">167 </span> <span class="Comment">// continuation from its calls</span>
<span id="L168" class="LineNr">168 </span> Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span>front<span class="Delimiter">().</span>ingredient_atoms<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
<span id="L169" class="LineNr">169 </span> Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span>front<span class="Delimiter">().</span>next_ingredient_to_process = <span class="Constant">0</span><span class="Delimiter">;</span>
<span id="L170" class="LineNr">170 </span> <span class="Comment">// copy the current call stack until the most recent marked call</span>
<span id="L171" class="LineNr">171 </span> call_stack::iterator find_base_of_continuation<span class="Delimiter">(</span>call_stack&amp; c<span class="Delimiter">);</span> <span class="Comment">// manual prototype containing '::'</span>
<span id="L172" class="LineNr">172 </span> call_stack::iterator base = find_base_of_continuation<span class="Delimiter">(</span>Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">);</span>
<span id="L173" class="LineNr">173 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>base == Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span><a href='003trace.cc.html#L197'>end</a><span class="Delimiter">())</span> <span class="Delimiter">{</span>
<span id="L174" class="LineNr">174 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span><a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;couldn't find a 'call-with-continuation-mark' to return to</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
<span id="L175" class="LineNr">175 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span><a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;call stack:</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L176" class="LineNr">176 </span> <span class="Conceal">¦</span> <span class="Normal">for</span> <span class="Delimiter">(</span>call_stack::iterator p = Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span>begin<span class="Delimiter">();</span> p != Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span><a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span> ++p<span class="Delimiter">)</span>
<span id="L177" class="LineNr">177 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span><a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot; &quot;</span> &lt;&lt; get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> p<span class="Delimiter">-&gt;</span>running_recipe<span class="Delimiter">).</span>name &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L178" class="LineNr">178 </span> <span class="Conceal">¦</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L179" class="LineNr">179 </span> <span class="Delimiter">}</span>
<span id="L180" class="LineNr">180 </span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;creating continuation &quot;</span> &lt;&lt; Next_delimited_continuation_id &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L181" class="LineNr">181 </span> <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Delimited_continuation<span class="Delimiter">,</span> Next_delimited_continuation_id<span class="Delimiter">,</span> delimited_continuation<span class="Delimiter">(</span>Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span>begin<span class="Delimiter">(),</span> base<span class="Delimiter">));</span>
<span id="L182" class="LineNr">182 </span> <span class="Normal">while</span> <span class="Delimiter">(</span>Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span>begin<span class="Delimiter">()</span> != base<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L183" class="LineNr">183 </span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>Trace_stream<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L184" class="LineNr">184 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> --Trace_stream<span class="Delimiter">-&gt;</span>callstack_depth<span class="Delimiter">;</span>
<span id="L185" class="LineNr">185 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> assert<span class="Delimiter">(</span>Trace_stream<span class="Delimiter">-&gt;</span>callstack_depth &gt;= <span class="Constant">0</span><span class="Delimiter">);</span>
<span id="L186" class="LineNr">186 </span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>
<span id="L187" class="LineNr">187 </span> <span class="Conceal">¦</span> Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span>pop_front<span class="Delimiter">();</span>
<span id="L188" class="LineNr">188 </span> <span class="Delimiter">}</span>
<span id="L189" class="LineNr">189 </span> <span class="Comment">// return it as the result of the marked call</span>
<span id="L190" class="LineNr">190 </span> products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
<span id="L191" class="LineNr">191 </span> products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span>Next_delimited_continuation_id<span class="Delimiter">);</span>
<span id="L192" class="LineNr">192 </span> <span class="Comment">// return any other ingredients passed in</span>
<span id="L193" class="LineNr">193 </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#L197'>end</a><span class="Delimiter">(),</span> inserter<span class="Delimiter">(</span>products<span class="Delimiter">,</span> products<span class="Delimiter">.</span><a href='003trace.cc.html#L197'>end</a><span class="Delimiter">()));</span>
<span id="L194" class="LineNr">194 </span> ++Next_delimited_continuation_id<span class="Delimiter">;</span>
<span id="L195" class="LineNr">195 </span> <span class="Identifier">break</span><span class="Delimiter">;</span> <span class="Comment">// continue to process rest of marked call</span>
<span id="L196" class="LineNr">196 </span><span class="Delimiter">}</span>
<span id="L197" class="LineNr">197 </span>
<span id="L198" class="LineNr">198 </span><span class="Delimiter">:(code)</span>
<span id="L199" class="LineNr">199 </span>call_stack::iterator find_base_of_continuation<span class="Delimiter">(</span>call_stack&amp; c<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L200" class="LineNr">200 </span> <span class="Normal">for</span> <span class="Delimiter">(</span>call_stack::iterator p = c<span class="Delimiter">.</span>begin<span class="Delimiter">();</span> p != c<span class="Delimiter">.</span><a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span> ++p<span class="Delimiter">)</span>
<span id="L201" class="LineNr">201 </span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>p<span class="Delimiter">-&gt;</span>is_base_of_continuation<span class="Delimiter">)</span> <span class="Identifier">return</span> p<span class="Delimiter">;</span>
<span id="L202" class="LineNr">202 </span> <span class="Identifier">return</span> c<span class="Delimiter">.</span><a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L203" class="LineNr">203 </span><span class="Delimiter">}</span>
<span id="L204" class="LineNr">204 </span>
<span id="L205" class="LineNr">205 </span><span class="Comment">//: overload 'call' for continuations</span>
<span id="L206" class="LineNr">206 </span><span class="Delimiter">:(after &quot;Begin Call&quot;)</span>
<span id="L207" class="LineNr">207 </span><span class="Normal">if</span> <span class="Delimiter">(</span>is_mu_continuation<span class="Delimiter">(</span><a href='026call.cc.html#L87'>current_instruction</a><span class="Delimiter">().</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)))</span> <span class="Delimiter">{</span>
<span id="L208" class="LineNr">208 </span> <span class="Comment">// copy multiple calls on to current call stack</span>
<span id="L209" class="LineNr">209 </span> assert<span class="Delimiter">(</span>scalar<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)));</span>
<span id="L210" class="LineNr">210 </span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;calling continuation &quot;</span> &lt;&lt; ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L211" class="LineNr">211 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span>Delimited_continuation<span class="Delimiter">,</span> ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)))</span>
<span id="L212" class="LineNr">212 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span><a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;no such delimited continuation &quot;</span> &lt;&lt; <a href='026call.cc.html#L87'>current_instruction</a><span class="Delimiter">().</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>original_string &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L213" class="LineNr">213 </span> <span class="Normal">const</span> call_stack&amp; new_frames = get<span class="Delimiter">(</span>Delimited_continuation<span class="Delimiter">,</span> ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)).</span>frames<span class="Delimiter">;</span>
<span id="L214" class="LineNr">214 </span> <span class="Normal">for</span> <span class="Delimiter">(</span>call_stack::const_reverse_iterator p = new_frames<span class="Delimiter">.</span>rbegin<span class="Delimiter">();</span> p != new_frames<span class="Delimiter">.</span>rend<span class="Delimiter">();</span> ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L215" class="LineNr">215 </span> <span class="Conceal">¦</span> Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span>push_front<span class="Delimiter">(</span>*p<span class="Delimiter">);</span>
<span id="L216" class="LineNr">216 </span> <span class="Conceal">¦</span> <span class="Comment">// ensure that the presence of a continuation keeps its stack frames from being reclaimed</span>
<span id="L217" class="LineNr">217 </span> <span class="Conceal">¦</span> <a href='036refcount.cc.html#L50'>increment_refcount</a><span class="Delimiter">(</span>Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span>front<span class="Delimiter">().</span>default_space<span class="Delimiter">);</span>
<span id="L218" class="LineNr">218 </span> <span class="Delimiter">}</span>
<span id="L219" class="LineNr">219 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>Trace_stream<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L220" class="LineNr">220 </span> <span class="Conceal">¦</span> Trace_stream<span class="Delimiter">-&gt;</span>callstack_depth += <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>new_frames<span class="Delimiter">);</span>
<span id="L221" class="LineNr">221 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;trace&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;calling delimited continuation; growing callstack depth to &quot;</span> &lt;&lt; Trace_stream<span class="Delimiter">-&gt;</span>callstack_depth &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L222" class="LineNr">222 </span> <span class="Conceal">¦</span> assert<span class="Delimiter">(</span>Trace_stream<span class="Delimiter">-&gt;</span>callstack_depth &lt; <span class="Constant">9000</span><span class="Delimiter">);</span> <span class="Comment">// 9998-101 plus cushion</span>
<span id="L223" class="LineNr">223 </span> <span class="Delimiter">}</span>
<span id="L224" class="LineNr">224 </span> <span class="Comment">// no call housekeeping; continuations don't support next-ingredient</span>
<span id="L225" class="LineNr">225 </span> copy<span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment">drop continuation</span><span class="Comment">*/</span>++ingredients<span class="Delimiter">.</span>begin<span class="Delimiter">(),</span> ingredients<span class="Delimiter">.</span><a href='003trace.cc.html#L197'>end</a><span class="Delimiter">(),</span> inserter<span class="Delimiter">(</span>products<span class="Delimiter">,</span> products<span class="Delimiter">.</span>begin<span class="Delimiter">()));</span>
<span id="L226" class="LineNr">226 </span> <span class="Identifier">break</span><span class="Delimiter">;</span> <span class="Comment">// record results of resuming 'return-continuation-until-mark' instruction</span>
<span id="L227" class="LineNr">227 </span><span class="Delimiter">}</span>
<span id="L228" class="LineNr">228 </span>
<span id="L229" class="LineNr">229 </span><span class="Delimiter">:(scenario continuations_can_return_values)</span>
<span id="L230" class="LineNr">230 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
<span id="L231" class="LineNr">231 </span> local-scope
<span id="L232" class="LineNr">232 </span> <span class="Normal">k</span>:continuation<span class="Delimiter">,</span> <span class="Constant">1</span>:num/<span class="Special">raw &lt;- </span>call-with-continuation-mark f
<span id="L233" class="LineNr">233 </span>]
<span id="L234" class="LineNr">234 </span><span class="muRecipe">def</span> f [
<span id="L235" class="LineNr">235 </span> local-scope
<span id="L236" class="LineNr">236 </span> <span class="Normal">k</span>:continuation<span class="Special"> &lt;- </span>call-with-continuation-mark f
<span id="L237" class="LineNr">237 </span> call k
<span id="L238" class="LineNr">238 </span> <span class="Identifier">return</span> <span class="Constant">34</span>
<span id="L239" class="LineNr">239 </span>]
<span id="L240" class="LineNr">240 </span><span class="muRecipe">def</span> f [
<span id="L241" class="LineNr">241 </span> local-scope
<span id="L242" class="LineNr">242 </span> g
<span id="L243" class="LineNr">243 </span>]
<span id="L244" class="LineNr">244 </span><span class="muRecipe">def</span> g [
<span id="L245" class="LineNr">245 </span> local-scope
<span id="L246" class="LineNr">246 </span> <span class="Identifier">return</span>-continuation-until-mark
<span id="L247" class="LineNr">247 </span> add <span class="Constant">1</span><span class="Delimiter">,</span> <span class="Constant">1</span>
<span id="L248" class="LineNr">248 </span>]
<span id="L249" class="LineNr">249 </span><span class="Comment"># entering main</span>
<span id="L250" class="LineNr">250 </span><span class="traceContains">+mem: new alloc: 1000</span>
<span id="L251" class="LineNr">251 </span><span class="traceContains">+run: {k: &quot;continuation&quot;} &lt;- call-with-continuation-mark {f: &quot;recipe-literal&quot;}</span>
<span id="L252" class="LineNr">252 </span><span class="Comment"># entering f</span>
<span id="L253" class="LineNr">253 </span><span class="traceContains">+mem: new alloc: 1004</span>
<span id="L254" class="LineNr">254 </span><span class="Comment"># entering g</span>
<span id="L255" class="LineNr">255 </span><span class="traceContains">+mem: new alloc: 1007</span>
<span id="L256" class="LineNr">256 </span><span class="Comment"># return control to main</span>
<span id="L257" class="LineNr">257 </span><span class="traceContains">+run: return-continuation-until-mark</span>
<span id="L258" class="LineNr">258 </span><span class="Comment"># no allocs abandoned yet</span>
<span id="L259" class="LineNr">259 </span><span class="Comment"># finish running main</span>
<span id="L260" class="LineNr">260 </span><span class="traceContains">+run: call {k: &quot;continuation&quot;}</span>
<span id="L261" class="LineNr">261 </span><span class="traceContains">+run: add {1: &quot;literal&quot;}, {1: &quot;literal&quot;}</span>
<span id="L262" class="LineNr">262 </span><span class="traceContains">+run: return {34: &quot;literal&quot;}</span>
<span id="L263" class="LineNr">263 </span><span class="Comment"># now k is reclaimed</span>
<span id="L264" class="LineNr">264 </span><span class="traceContains">+mem: trying to reclaim local k:continuation</span>
<span id="L265" class="LineNr">265 </span><span class="Comment"># at this point all allocs in the continuation are abandoned</span>
<span id="L266" class="LineNr">266 </span><span class="traceContains">+mem: automatically abandoning 1007</span>
<span id="L267" class="LineNr">267 </span><span class="traceContains">+mem: automatically abandoning 1004</span>
<span id="L268" class="LineNr">268 </span><span class="Comment"># finally the alloc for main is abandoned</span>
<span id="L269" class="LineNr">269 </span><span class="traceContains">+mem: automatically abandoning 1000</span>
<span id="L270" class="LineNr">270 </span>
<span id="L271" class="LineNr">271 </span><span class="Delimiter">:(after &quot;Begin Decrement Refcounts(canonized_x)&quot;)</span>
<span id="L272" class="LineNr">272 </span><span class="Normal">if</span> <span class="Delimiter">(</span>is_mu_continuation<span class="Delimiter">(</span>canonized_x<span class="Delimiter">))</span> <span class="Delimiter">{</span>
<span id="L273" class="LineNr">273 </span> <span class="Normal">int</span> continuation_id = <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> canonized_x<span class="Delimiter">.</span>value<span class="Delimiter">);</span>
<span id="L274" class="LineNr">274 </span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;reclaiming continuation &quot;</span> &lt;&lt; continuation_id &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L275" class="LineNr">275 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>continuation_id == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
<span id="L276" class="LineNr">276 </span> <span class="Normal">const</span> call_stack&amp; continuation_calls = get<span class="Delimiter">(</span>Delimited_continuation<span class="Delimiter">,</span> continuation_id<span class="Delimiter">);</span>
<span id="L277" class="LineNr">277 </span> <span class="Comment">// temporarily push the stack frames for the continuation one last time on to the call stack</span>
<span id="L278" class="LineNr">278 </span> <span class="Normal">for</span> <span class="Delimiter">(</span>call_stack::const_reverse_iterator p = continuation_calls<span class="Delimiter">.</span>rbegin<span class="Delimiter">();</span> p != continuation_calls<span class="Delimiter">.</span>rend<span class="Delimiter">();</span> ++p<span class="Delimiter">)</span>
<span id="L279" class="LineNr">279 </span> <span class="Conceal">¦</span> Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span>push_front<span class="Delimiter">(</span>*p<span class="Delimiter">);</span>
<span id="L280" class="LineNr">280 </span> <span class="Comment">// reclaim their spaces while popping them</span>
<span id="L281" class="LineNr">281 </span> <span class="Comment">// (because reclaim_default_space() relies on the default-space being reclaimed being at the top of the stack)</span>
<span id="L282" class="LineNr">282 </span> <span class="Normal">for</span> <span class="Delimiter">(</span>call_stack::const_iterator p = continuation_calls<span class="Delimiter">.</span>begin<span class="Delimiter">();</span> p != continuation_calls<span class="Delimiter">.</span><a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span> ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L283" class="LineNr">283 </span> <span class="Conceal">¦</span> <a href='043space.cc.html#L244'>reclaim_default_space</a><span class="Delimiter">();</span>
<span id="L284" class="LineNr">284 </span> <span class="Conceal">¦</span> Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span>pop_front<span class="Delimiter">();</span>
<span id="L285" class="LineNr">285 </span> <span class="Delimiter">}</span>
<span id="L286" class="LineNr">286 </span> <span class="Identifier">return</span><span class="Delimiter">;</span>
<span id="L287" class="LineNr">287 </span><span class="Delimiter">}</span>
<span id="L288" class="LineNr">288 </span>
<span id="L289" class="LineNr">289 </span><span class="Delimiter">:(code)</span>
<span id="L290" class="LineNr">290 </span><span class="Normal">bool</span> is_mu_continuation<span class="Delimiter">(</span>reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> x<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L291" class="LineNr">291 </span> canonize_type<span class="Delimiter">(</span>x<span class="Delimiter">);</span>
<span id="L292" class="LineNr">292 </span> <span class="Identifier">return</span> x<span class="Delimiter">.</span>type &amp;&amp; x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>atom &amp;&amp; x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>value == get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;continuation&quot;</span><span class="Delimiter">);</span>
<span id="L293" class="LineNr">293 </span><span class="Delimiter">}</span>
<span id="L294" class="LineNr">294 </span>
<span id="L295" class="LineNr">295 </span><span class="Delimiter">:(scenario continuations_can_return_values)</span>
<span id="L296" class="LineNr">296 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
<span id="L297" class="LineNr">297 </span> local-scope
<span id="L298" class="LineNr">298 </span> <span class="Normal">k</span>:continuation<span class="Delimiter">,</span> <span class="Constant">1</span>:num/<span class="Special">raw &lt;- </span>call-with-continuation-mark f
<span id="L299" class="LineNr">299 </span>]
<span id="L300" class="LineNr">300 </span><span class="muRecipe">def</span> f [
<span id="L301" class="LineNr">301 </span> local-scope
<span id="L302" class="LineNr">302 </span> g
<span id="L303" class="LineNr">303 </span>]
<span id="L304" class="LineNr">304 </span><span class="muRecipe">def</span> g [
<span id="L305" class="LineNr">305 </span> local-scope
<span id="L306" class="LineNr">306 </span> <span class="Identifier">return</span>-continuation-until-mark <span class="Constant">34</span>
<span id="L307" class="LineNr">307 </span> stash [continuation called]
<span id="L308" class="LineNr">308 </span>]
<span id="L309" class="LineNr">309 </span><span class="Comment"># entering main</span>
<span id="L310" class="LineNr">310 </span><span class="traceContains">+mem: new alloc: 1000</span>
<span id="L311" class="LineNr">311 </span><span class="traceContains">+run: {k: &quot;continuation&quot;}, {1: &quot;number&quot;, &quot;raw&quot;: ()} &lt;- call-with-continuation-mark {f: &quot;recipe-literal&quot;}</span>
<span id="L312" class="LineNr">312 </span><span class="Comment"># entering f</span>
<span id="L313" class="LineNr">313 </span><span class="traceContains">+mem: new alloc: 1004</span>
<span id="L314" class="LineNr">314 </span><span class="Comment"># entering g</span>
<span id="L315" class="LineNr">315 </span><span class="traceContains">+mem: new alloc: 1007</span>
<span id="L316" class="LineNr">316 </span><span class="Comment"># return control to main</span>
<span id="L317" class="LineNr">317 </span><span class="traceContains">+run: return-continuation-until-mark {34: &quot;literal&quot;}</span>
<span id="L318" class="LineNr">318 </span><span class="Comment"># no allocs abandoned yet</span>
<span id="L319" class="LineNr">319 </span><span class="traceContains">+mem: storing 34 in location 1</span>
<span id="L320" class="LineNr">320 </span><span class="Comment"># end of main</span>
<span id="L321" class="LineNr">321 </span><span class="Comment"># make sure no memory leaks..</span>
<span id="L322" class="LineNr">322 </span><span class="traceContains">+mem: trying to reclaim local k:continuation</span>
<span id="L323" class="LineNr">323 </span><span class="traceContains">+mem: automatically abandoning 1007</span>
<span id="L324" class="LineNr">324 </span><span class="traceContains">+mem: automatically abandoning 1004</span>
<span id="L325" class="LineNr">325 </span><span class="traceContains">+mem: automatically abandoning 1000</span>
<span id="L326" class="LineNr">326 </span><span class="Comment"># ..even though we never called the continuation</span>
<span id="L327" class="LineNr">327 </span><span class="traceAbsent">-app: continuation called</span>
<span id="L236" class="LineNr">236 </span> g
<span id="L237" class="LineNr">237 </span>]
<span id="L238" class="LineNr">238 </span><span class="muRecipe">def</span> g [
<span id="L239" class="LineNr">239 </span> local-scope
<span id="L240" class="LineNr">240 </span> <span class="Identifier">return</span>-continuation-until-mark <span class="Constant">34</span>
<span id="L241" class="LineNr">241 </span> stash [continuation called]
<span id="L242" class="LineNr">242 </span>]
<span id="L243" class="LineNr">243 </span><span class="Comment"># entering main</span>
<span id="L244" class="LineNr">244 </span><span class="traceContains">+mem: new alloc: 1000</span>
<span id="L245" class="LineNr">245 </span><span class="traceContains">+run: {k: &quot;continuation&quot;}, {1: &quot;number&quot;, &quot;raw&quot;: ()} &lt;- call-with-continuation-mark {f: &quot;recipe-literal&quot;}</span>
<span id="L246" class="LineNr">246 </span><span class="Comment"># entering f</span>
<span id="L247" class="LineNr">247 </span><span class="traceContains">+mem: new alloc: 1004</span>
<span id="L248" class="LineNr">248 </span><span class="Comment"># entering g</span>
<span id="L249" class="LineNr">249 </span><span class="traceContains">+mem: new alloc: 1007</span>
<span id="L250" class="LineNr">250 </span><span class="Comment"># return control to main</span>
<span id="L251" class="LineNr">251 </span><span class="traceContains">+run: return-continuation-until-mark {34: &quot;literal&quot;}</span>
<span id="L252" class="LineNr">252 </span><span class="Comment"># no allocs abandoned yet</span>
<span id="L253" class="LineNr">253 </span><span class="traceContains">+mem: storing 34 in location 1</span>
<span id="L254" class="LineNr">254 </span><span class="Comment"># end of main</span>
<span id="L255" class="LineNr">255 </span><span class="Comment"># make sure no memory leaks..</span>
<span id="L256" class="LineNr">256 </span><span class="traceContains">+mem: trying to reclaim local k:continuation</span>
<span id="L257" class="LineNr">257 </span><span class="traceContains">+mem: automatically abandoning 1007</span>
<span id="L258" class="LineNr">258 </span><span class="traceContains">+mem: automatically abandoning 1004</span>
<span id="L259" class="LineNr">259 </span><span class="traceContains">+mem: automatically abandoning 1000</span>
<span id="L260" class="LineNr">260 </span><span class="Comment"># ..even though we never called the continuation</span>
<span id="L261" class="LineNr">261 </span><span class="traceAbsent">-app: continuation called</span>
<span id="L262" class="LineNr">262 </span>
<span id="L263" class="LineNr">263 </span><span class="Comment">//: Ensure that the presence of a continuation keeps its stack frames from being reclaimed.</span>
<span id="L264" class="LineNr">264 </span>
<span id="L265" class="LineNr">265 </span><span class="Delimiter">:(scenario continuations_preserve_local_scopes)</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> local-scope
<span id="L268" class="LineNr">268 </span> <span class="Normal">k</span>:continuation<span class="Special"> &lt;- </span>call-with-continuation-mark f
<span id="L269" class="LineNr">269 </span> call k
<span id="L270" class="LineNr">270 </span> <span class="Identifier">return</span> <span class="Constant">34</span>
<span id="L271" class="LineNr">271 </span>]
<span id="L272" class="LineNr">272 </span><span class="muRecipe">def</span> f [
<span id="L273" class="LineNr">273 </span> local-scope
<span id="L274" class="LineNr">274 </span> g
<span id="L275" class="LineNr">275 </span>]
<span id="L276" class="LineNr">276 </span><span class="muRecipe">def</span> g [
<span id="L277" class="LineNr">277 </span> local-scope
<span id="L278" class="LineNr">278 </span> <span class="Identifier">return</span>-continuation-until-mark
<span id="L279" class="LineNr">279 </span> add <span class="Constant">1</span><span class="Delimiter">,</span> <span class="Constant">1</span>
<span id="L280" class="LineNr">280 </span>]
<span id="L281" class="LineNr">281 </span><span class="Comment"># entering main</span>
<span id="L282" class="LineNr">282 </span><span class="traceContains">+mem: new alloc: 1000</span>
<span id="L283" class="LineNr">283 </span><span class="traceContains">+run: {k: &quot;continuation&quot;} &lt;- call-with-continuation-mark {f: &quot;recipe-literal&quot;}</span>
<span id="L284" class="LineNr">284 </span><span class="Comment"># entering f</span>
<span id="L285" class="LineNr">285 </span><span class="traceContains">+mem: new alloc: 1004</span>
<span id="L286" class="LineNr">286 </span><span class="Comment"># entering g</span>
<span id="L287" class="LineNr">287 </span><span class="traceContains">+mem: new alloc: 1007</span>
<span id="L288" class="LineNr">288 </span><span class="Comment"># return control to main</span>
<span id="L289" class="LineNr">289 </span><span class="traceContains">+run: return-continuation-until-mark</span>
<span id="L290" class="LineNr">290 </span><span class="Comment"># no allocs abandoned yet</span>
<span id="L291" class="LineNr">291 </span><span class="Comment"># finish running main</span>
<span id="L292" class="LineNr">292 </span><span class="traceContains">+run: call {k: &quot;continuation&quot;}</span>
<span id="L293" class="LineNr">293 </span><span class="traceContains">+run: add {1: &quot;literal&quot;}, {1: &quot;literal&quot;}</span>
<span id="L294" class="LineNr">294 </span><span class="traceContains">+run: return {34: &quot;literal&quot;}</span>
<span id="L295" class="LineNr">295 </span><span class="Comment"># now k is reclaimed</span>
<span id="L296" class="LineNr">296 </span><span class="traceContains">+mem: trying to reclaim local k:continuation</span>
<span id="L297" class="LineNr">297 </span><span class="Comment"># at this point all allocs in the continuation are abandoned</span>
<span id="L298" class="LineNr">298 </span><span class="traceContains">+mem: automatically abandoning 1007</span>
<span id="L299" class="LineNr">299 </span><span class="traceContains">+mem: automatically abandoning 1004</span>
<span id="L300" class="LineNr">300 </span><span class="Comment"># finally the alloc for main is abandoned</span>
<span id="L301" class="LineNr">301 </span><span class="traceContains">+mem: automatically abandoning 1000</span>
<span id="L302" class="LineNr">302 </span>
<span id="L303" class="LineNr">303 </span><span class="Delimiter">:(before &quot;End Increment Refcounts(canonized_x)&quot;)</span>
<span id="L304" class="LineNr">304 </span><span class="Normal">if</span> <span class="Delimiter">(</span>is_mu_continuation<span class="Delimiter">(</span>canonized_x<span class="Delimiter">))</span> <span class="Delimiter">{</span>
<span id="L305" class="LineNr">305 </span> <span class="Normal">int</span> continuation_id = data<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
<span id="L306" class="LineNr">306 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>continuation_id == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
<span id="L307" class="LineNr">307 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span>Delimited_continuation<span class="Delimiter">,</span> continuation_id<span class="Delimiter">))</span> <span class="Delimiter">{</span>
<span id="L308" class="LineNr">308 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span><a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;missing delimited continuation: &quot;</span> &lt;&lt; canonized_x<span class="Delimiter">.</span>name &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
<span id="L309" class="LineNr">309 </span> <span class="Conceal">¦</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
<span id="L310" class="LineNr">310 </span> <span class="Delimiter">}</span>
<span id="L311" class="LineNr">311 </span> delimited_continuation&amp; curr = get<span class="Delimiter">(</span>Delimited_continuation<span class="Delimiter">,</span> continuation_id<span class="Delimiter">);</span>
<span id="L312" class="LineNr">312 </span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;incrementing refcount of continuation &quot;</span> &lt;&lt; continuation_id &lt;&lt; <span class="Constant">&quot;: &quot;</span> &lt;&lt; curr<span class="Delimiter">.</span>nrefs &lt;&lt; <span class="Constant">&quot; -&gt; &quot;</span> &lt;&lt; <span class="Constant">1</span>+curr<span class="Delimiter">.</span>nrefs &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L313" class="LineNr">313 </span> ++curr<span class="Delimiter">.</span>nrefs<span class="Delimiter">;</span>
<span id="L314" class="LineNr">314 </span> <span class="Identifier">return</span><span class="Delimiter">;</span>
<span id="L315" class="LineNr">315 </span><span class="Delimiter">}</span>
<span id="L316" class="LineNr">316 </span>
<span id="L317" class="LineNr">317 </span><span class="Delimiter">:(before &quot;End Decrement Refcounts(canonized_x)&quot;)</span>
<span id="L318" class="LineNr">318 </span><span class="Normal">if</span> <span class="Delimiter">(</span>is_mu_continuation<span class="Delimiter">(</span>canonized_x<span class="Delimiter">))</span> <span class="Delimiter">{</span>
<span id="L319" class="LineNr">319 </span> <span class="Normal">int</span> continuation_id = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> canonized_x<span class="Delimiter">.</span>value<span class="Delimiter">);</span>
<span id="L320" class="LineNr">320 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>continuation_id == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
<span id="L321" class="LineNr">321 </span> delimited_continuation&amp; curr = get<span class="Delimiter">(</span>Delimited_continuation<span class="Delimiter">,</span> continuation_id<span class="Delimiter">);</span>
<span id="L322" class="LineNr">322 </span> assert<span class="Delimiter">(</span>curr<span class="Delimiter">.</span>nrefs &gt; <span class="Constant">0</span><span class="Delimiter">);</span>
<span id="L323" class="LineNr">323 </span> --curr<span class="Delimiter">.</span>nrefs<span class="Delimiter">;</span>
<span id="L324" class="LineNr">324 </span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;decrementing refcount of continuation &quot;</span> &lt;&lt; continuation_id &lt;&lt; <span class="Constant">&quot;: &quot;</span> &lt;&lt; <span class="Constant">1</span>+curr<span class="Delimiter">.</span>nrefs &lt;&lt; <span class="Constant">&quot; -&gt; &quot;</span> &lt;&lt; curr<span class="Delimiter">.</span>nrefs &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L325" class="LineNr">325 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>curr<span class="Delimiter">.</span>nrefs &gt; <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
<span id="L326" class="LineNr">326 </span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;reclaiming continuation &quot;</span> &lt;&lt; continuation_id &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L327" class="LineNr">327 </span> <span class="Comment">// temporarily push the stack frames for the continuation to the call stack before reclaiming their spaces</span>
<span id="L328" class="LineNr">328 </span> <span class="Comment">// (because reclaim_default_space() relies on the default-space being reclaimed being at the top of the stack)</span>
<span id="L329" class="LineNr">329 </span> <span class="Normal">for</span> <span class="Delimiter">(</span>call_stack::const_iterator p = curr<span class="Delimiter">.</span>frames<span class="Delimiter">.</span>begin<span class="Delimiter">();</span> p != curr<span class="Delimiter">.</span>frames<span class="Delimiter">.</span><a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span> ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L330" class="LineNr">330 </span> <span class="Conceal">¦</span> Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span>push_front<span class="Delimiter">(</span>*p<span class="Delimiter">);</span>
<span id="L331" class="LineNr">331 </span> <span class="Conceal">¦</span> <a href='043space.cc.html#L244'>reclaim_default_space</a><span class="Delimiter">();</span>
<span id="L332" class="LineNr">332 </span> <span class="Conceal">¦</span> Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span>pop_front<span class="Delimiter">();</span>
<span id="L333" class="LineNr">333 </span> <span class="Delimiter">}</span>
<span id="L334" class="LineNr">334 </span> Delimited_continuation<span class="Delimiter">.</span>erase<span class="Delimiter">(</span>continuation_id<span class="Delimiter">);</span>
<span id="L335" class="LineNr">335 </span> <span class="Identifier">return</span><span class="Delimiter">;</span>
<span id="L336" class="LineNr">336 </span><span class="Delimiter">}</span>
<span id="L337" class="LineNr">337 </span>
<span id="L338" class="LineNr">338 </span><span class="Delimiter">:(code)</span>
<span id="L339" class="LineNr">339 </span><span class="Normal">bool</span> is_mu_continuation<span class="Delimiter">(</span>reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> x<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L340" class="LineNr">340 </span> canonize_type<span class="Delimiter">(</span>x<span class="Delimiter">);</span>
<span id="L341" class="LineNr">341 </span> <span class="Identifier">return</span> x<span class="Delimiter">.</span>type &amp;&amp; x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>atom &amp;&amp; x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>value == get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;continuation&quot;</span><span class="Delimiter">);</span>
<span id="L342" class="LineNr">342 </span><span class="Delimiter">}</span>
<span id="L343" class="LineNr">343 </span>
<span id="L344" class="LineNr">344 </span><span class="Delimiter">:(scenario continuations_can_be_copied)</span>
<span id="L345" class="LineNr">345 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
<span id="L346" class="LineNr">346 </span> local-scope
<span id="L347" class="LineNr">347 </span> <span class="Normal">k</span>:continuation<span class="Special"> &lt;- </span>call-with-continuation-mark f
<span id="L348" class="LineNr">348 </span> <span class="Normal">k2</span>:continuation<span class="Special"> &lt;- </span>copy k
<span id="L349" class="LineNr">349 </span> <span class="Comment"># reclaiming k and k2 shouldn't delete f's local scope twice</span>
<span id="L350" class="LineNr">350 </span>]
<span id="L351" class="LineNr">351 </span><span class="muRecipe">def</span> f [
<span id="L352" class="LineNr">352 </span> local-scope
<span id="L353" class="LineNr">353 </span> load-ingredients
<span id="L354" class="LineNr">354 </span> <span class="Identifier">return</span>-continuation-until-mark
<span id="L355" class="LineNr">355 </span> <span class="Identifier">return</span> <span class="Constant">0</span>
<span id="L356" class="LineNr">356 </span>]
<span id="L357" class="LineNr">357 </span>$error: <span class="Constant">0</span>
</pre>
</body>
</html>

View File

@ -94,7 +94,7 @@ if ('onhashchange' in window) {
<span id="L31" class="LineNr"> 31 </span>
<span id="L32" class="LineNr"> 32 </span><span class="muRecipe">def</span> <a href='081print.mu.html#L32'>new-fake-screen</a> w:num, h:num<span class="muRecipe"> -&gt; </span>result:&amp;:<a href='081print.mu.html#L16'>screen</a> [
<span id="L33" class="LineNr"> 33 </span> <span class="Constant">local-scope</span>
<span id="L34" class="LineNr"> 34 </span> <span class="Constant">load-ingredients</span>
<span id="L34" class="LineNr"> 34 </span> <span class="Constant">load-inputs</span>
<span id="L35" class="LineNr"> 35 </span> result <span class="Special">&lt;-</span> new <span class="Constant"><a href='081print.mu.html#L16'>screen</a>:type</span>
<span id="L36" class="LineNr"> 36 </span> non-zero-width?:bool <span class="Special">&lt;-</span> greater-than w,<span class="Constant"> 0</span>
<span id="L37" class="LineNr"> 37 </span> assert non-zero-width?, <span class="Constant">[screen can't have zero width]</span>
@ -108,7 +108,7 @@ if ('onhashchange' in window) {
<span id="L45" class="LineNr"> 45 </span>
<span id="L46" class="LineNr"> 46 </span><span class="muRecipe">def</span> <a href='081print.mu.html#L46'>clear-screen</a> <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a><span class="muRecipe"> -&gt; </span><a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a> [
<span id="L47" class="LineNr"> 47 </span> <span class="Constant">local-scope</span>
<span id="L48" class="LineNr"> 48 </span> <span class="Constant">load-ingredients</span>
<span id="L48" class="LineNr"> 48 </span> <span class="Constant">load-inputs</span>
<span id="L49" class="LineNr"> 49 </span><span class="CommentedCode">#? stash [clear-screen]</span>
<span id="L50" class="LineNr"> 50 </span> <span class="Delimiter">{</span>
<span id="L51" class="LineNr"> 51 </span> <span class="Conceal">¦</span> <span class="muControl">break-if</span> <a href='081print.mu.html#L16'>screen</a>
@ -136,7 +136,7 @@ if ('onhashchange' in window) {
<span id="L73" class="LineNr"> 73 </span>
<span id="L74" class="LineNr"> 74 </span><span class="muRecipe">def</span> <a href='081print.mu.html#L74'>fake-screen-is-empty?</a> <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a><span class="muRecipe"> -&gt; </span>result:bool [
<span id="L75" class="LineNr"> 75 </span> <span class="Constant">local-scope</span>
<span id="L76" class="LineNr"> 76 </span> <span class="Constant">load-ingredients</span>
<span id="L76" class="LineNr"> 76 </span> <span class="Constant">load-inputs</span>
<span id="L77" class="LineNr"> 77 </span><span class="CommentedCode">#? stash [fake-screen-is-empty?]</span>
<span id="L78" class="LineNr"> 78 </span> <span class="muControl">return-unless</span> <a href='081print.mu.html#L16'>screen</a>, <span class="Constant">1/true</span> <span class="Comment"># do nothing for real screens</span>
<span id="L79" class="LineNr"> 79 </span> buf:&amp;:@:<a href='081print.mu.html#L27'>screen-cell</a> <span class="Special">&lt;-</span> get *screen, <span class="Constant">data:offset</span>
@ -157,14 +157,14 @@ if ('onhashchange' in window) {
<span id="L94" class="LineNr"> 94 </span>
<span id="L95" class="LineNr"> 95 </span><span class="muRecipe">def</span> print <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a>, c:char<span class="muRecipe"> -&gt; </span><a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a> [
<span id="L96" class="LineNr"> 96 </span> <span class="Constant">local-scope</span>
<span id="L97" class="LineNr"> 97 </span> <span class="Constant">load-ingredients</span>
<span id="L98" class="LineNr"> 98 </span> color:num, color-found?:bool <span class="Special">&lt;-</span> <span class="Constant">next-ingredient</span>
<span id="L97" class="LineNr"> 97 </span> <span class="Constant">load-inputs</span>
<span id="L98" class="LineNr"> 98 </span> color:num, color-found?:bool <span class="Special">&lt;-</span> <span class="Constant">next-input</span>
<span id="L99" class="LineNr"> 99 </span> <span class="Delimiter">{</span>
<span id="L100" class="LineNr">100 </span> <span class="Conceal">¦</span> <span class="Comment"># default color to white</span>
<span id="L101" class="LineNr">101 </span> <span class="Conceal">¦</span> <span class="muControl">break-if</span> color-found?
<span id="L102" class="LineNr">102 </span> <span class="Conceal">¦</span> color <span class="Special">&lt;-</span> copy <span class="Constant">7/white</span>
<span id="L103" class="LineNr">103 </span> <span class="Delimiter">}</span>
<span id="L104" class="LineNr">104 </span> bg-color:num, bg-color-found?:bool <span class="Special">&lt;-</span> <span class="Constant">next-ingredient</span>
<span id="L104" class="LineNr">104 </span> bg-color:num, bg-color-found?:bool <span class="Special">&lt;-</span> <span class="Constant">next-input</span>
<span id="L105" class="LineNr">105 </span> <span class="Delimiter">{</span>
<span id="L106" class="LineNr">106 </span> <span class="Conceal">¦</span> <span class="Comment"># default bg-color to black</span>
<span id="L107" class="LineNr">107 </span> <span class="Conceal">¦</span> <span class="muControl">break-if</span> bg-color-found?
@ -268,7 +268,7 @@ if ('onhashchange' in window) {
<span id="L205" class="LineNr">205 </span>
<span id="L206" class="LineNr">206 </span><span class="muRecipe">def</span> <a href='081print.mu.html#L206'>cursor-down-on-fake-screen</a> <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a><span class="muRecipe"> -&gt; </span><a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a> [
<span id="L207" class="LineNr">207 </span> <span class="Constant">local-scope</span>
<span id="L208" class="LineNr">208 </span> <span class="Constant">load-ingredients</span>
<span id="L208" class="LineNr">208 </span> <span class="Constant">load-inputs</span>
<span id="L209" class="LineNr">209 </span><span class="CommentedCode">#? stash [cursor-down]</span>
<span id="L210" class="LineNr">210 </span> row:num <span class="Special">&lt;-</span> get *screen, <span class="Constant">cursor-row:offset</span>
<span id="L211" class="LineNr">211 </span> height:num <span class="Special">&lt;-</span> get *screen, <span class="Constant">num-rows:offset</span>
@ -287,7 +287,7 @@ if ('onhashchange' in window) {
<span id="L224" class="LineNr">224 </span>
<span id="L225" class="LineNr">225 </span><span class="muRecipe">def</span> <a href='081print.mu.html#L225'>scroll-fake-screen</a> <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a><span class="muRecipe"> -&gt; </span><a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a> [
<span id="L226" class="LineNr">226 </span> <span class="Constant">local-scope</span>
<span id="L227" class="LineNr">227 </span> <span class="Constant">load-ingredients</span>
<span id="L227" class="LineNr">227 </span> <span class="Constant">load-inputs</span>
<span id="L228" class="LineNr">228 </span><span class="CommentedCode">#? stash [scroll-fake-screen]</span>
<span id="L229" class="LineNr">229 </span> width:num <span class="Special">&lt;-</span> get *screen, <span class="Constant">num-columns:offset</span>
<span id="L230" class="LineNr">230 </span> height:num <span class="Special">&lt;-</span> get *screen, <span class="Constant">num-rows:offset</span>
@ -315,7 +315,7 @@ if ('onhashchange' in window) {
<span id="L252" class="LineNr">252 </span><span class="Comment"># while accounting for scrolling (sliding top-idx)</span>
<span id="L253" class="LineNr">253 </span><span class="muRecipe">def</span> <a href='081print.mu.html#L253'>data-index</a> row:num, column:num, width:num, height:num, top-idx:num<span class="muRecipe"> -&gt; </span>result:num [
<span id="L254" class="LineNr">254 </span> <span class="Constant">local-scope</span>
<span id="L255" class="LineNr">255 </span> <span class="Constant">load-ingredients</span>
<span id="L255" class="LineNr">255 </span> <span class="Constant">load-inputs</span>
<span id="L256" class="LineNr">256 </span> <span class="Delimiter">{</span>
<span id="L257" class="LineNr">257 </span> <span class="Conceal">¦</span> overflow?:bool <span class="Special">&lt;-</span> greater-or-equal row, height
<span id="L258" class="LineNr">258 </span> <span class="Conceal">¦</span> <span class="muControl">break-unless</span> overflow?
@ -571,13 +571,13 @@ if ('onhashchange' in window) {
<span id="L508" class="LineNr">508 </span><span class="Comment"># these helpers help check for scrolling at development time</span>
<span id="L509" class="LineNr">509 </span><span class="muRecipe">def</span> <a href='081print.mu.html#L509'>save-top-idx</a> <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a><span class="muRecipe"> -&gt; </span>result:num [
<span id="L510" class="LineNr">510 </span> <span class="Constant">local-scope</span>
<span id="L511" class="LineNr">511 </span> <span class="Constant">load-ingredients</span>
<span id="L511" class="LineNr">511 </span> <span class="Constant">load-inputs</span>
<span id="L512" class="LineNr">512 </span> <span class="muControl">return-unless</span> <a href='081print.mu.html#L16'>screen</a>,<span class="Constant"> 0</span> <span class="Comment"># check is only for fake screens</span>
<span id="L513" class="LineNr">513 </span> result <span class="Special">&lt;-</span> get *screen, <span class="Constant">top-idx:offset</span>
<span id="L514" class="LineNr">514 </span>]
<span id="L515" class="LineNr">515 </span><span class="muRecipe">def</span> <a href='081print.mu.html#L515'>assert-no-scroll</a> <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a>, old-top-idx:num [
<span id="L516" class="LineNr">516 </span> <span class="Constant">local-scope</span>
<span id="L517" class="LineNr">517 </span> <span class="Constant">load-ingredients</span>
<span id="L517" class="LineNr">517 </span> <span class="Constant">load-inputs</span>
<span id="L518" class="LineNr">518 </span> <span class="muControl">return-unless</span> <a href='081print.mu.html#L16'>screen</a>
<span id="L519" class="LineNr">519 </span> new-top-idx:num <span class="Special">&lt;-</span> get *screen, <span class="Constant">top-idx:offset</span>
<span id="L520" class="LineNr">520 </span> no-scroll?:bool <span class="Special">&lt;-</span> equal old-top-idx, new-top-idx
@ -586,7 +586,7 @@ if ('onhashchange' in window) {
<span id="L523" class="LineNr">523 </span>
<span id="L524" class="LineNr">524 </span><span class="muRecipe">def</span> <a href='081print.mu.html#L524'>clear-line</a> <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a><span class="muRecipe"> -&gt; </span><a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a> [
<span id="L525" class="LineNr">525 </span> <span class="Constant">local-scope</span>
<span id="L526" class="LineNr">526 </span> <span class="Constant">load-ingredients</span>
<span id="L526" class="LineNr">526 </span> <span class="Constant">load-inputs</span>
<span id="L527" class="LineNr">527 </span><span class="CommentedCode">#? stash [clear-line]</span>
<span id="L528" class="LineNr">528 </span> space:char <span class="Special">&lt;-</span> copy <span class="Constant">0/nul</span>
<span id="L529" class="LineNr">529 </span> <span class="Delimiter">{</span>
@ -615,14 +615,14 @@ if ('onhashchange' in window) {
<span id="L552" class="LineNr">552 </span><span class="Comment"># only for non-scrolling apps</span>
<span id="L553" class="LineNr">553 </span><span class="muRecipe">def</span> <a href='081print.mu.html#L553'>clear-line-until</a> <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a>, right:num/inclusive<span class="muRecipe"> -&gt; </span><a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a> [
<span id="L554" class="LineNr">554 </span> <span class="Constant">local-scope</span>
<span id="L555" class="LineNr">555 </span> <span class="Constant">load-ingredients</span>
<span id="L555" class="LineNr">555 </span> <span class="Constant">load-inputs</span>
<span id="L556" class="LineNr">556 </span> row:num, column:num <span class="Special">&lt;-</span> <a href='081print.mu.html#L577'>cursor-position</a> <a href='081print.mu.html#L16'>screen</a>
<span id="L557" class="LineNr">557 </span><span class="CommentedCode">#? stash [clear-line-until] row column</span>
<span id="L558" class="LineNr">558 </span> height:num <span class="Special">&lt;-</span> <a href='081print.mu.html#L782'>screen-height</a> <a href='081print.mu.html#L16'>screen</a>
<span id="L559" class="LineNr">559 </span> past-bottom?:bool <span class="Special">&lt;-</span> greater-or-equal row, height
<span id="L560" class="LineNr">560 </span> <span class="muControl">return-if</span> past-bottom?
<span id="L561" class="LineNr">561 </span> space:char <span class="Special">&lt;-</span> copy <span class="Constant">32/space</span>
<span id="L562" class="LineNr">562 </span> bg-color:num, bg-color-found?:bool <span class="Special">&lt;-</span> <span class="Constant">next-ingredient</span>
<span id="L562" class="LineNr">562 </span> bg-color:num, bg-color-found?:bool <span class="Special">&lt;-</span> <span class="Constant">next-input</span>
<span id="L563" class="LineNr">563 </span> <span class="Delimiter">{</span>
<span id="L564" class="LineNr">564 </span> <span class="Conceal">¦</span> <span class="Comment"># default bg-color to black</span>
<span id="L565" class="LineNr">565 </span> <span class="Conceal">¦</span> <span class="muControl">break-if</span> bg-color-found?
@ -639,7 +639,7 @@ if ('onhashchange' in window) {
<span id="L576" class="LineNr">576 </span>
<span id="L577" class="LineNr">577 </span><span class="muRecipe">def</span> <a href='081print.mu.html#L577'>cursor-position</a> <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a><span class="muRecipe"> -&gt; </span>row:num, column:num [
<span id="L578" class="LineNr">578 </span> <span class="Constant">local-scope</span>
<span id="L579" class="LineNr">579 </span> <span class="Constant">load-ingredients</span>
<span id="L579" class="LineNr">579 </span> <span class="Constant">load-inputs</span>
<span id="L580" class="LineNr">580 </span> <span class="Delimiter">{</span>
<span id="L581" class="LineNr">581 </span> <span class="Conceal">¦</span> <span class="muControl">break-if</span> <a href='081print.mu.html#L16'>screen</a>
<span id="L582" class="LineNr">582 </span> <span class="Conceal">¦</span> <span class="Comment"># real screen</span>
@ -653,7 +653,7 @@ if ('onhashchange' in window) {
<span id="L590" class="LineNr">590 </span>
<span id="L591" class="LineNr">591 </span><span class="muRecipe">def</span> <a href='081print.mu.html#L591'>move-cursor</a> <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a>, new-row:num, new-column:num<span class="muRecipe"> -&gt; </span><a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a> [
<span id="L592" class="LineNr">592 </span> <span class="Constant">local-scope</span>
<span id="L593" class="LineNr">593 </span> <span class="Constant">load-ingredients</span>
<span id="L593" class="LineNr">593 </span> <span class="Constant">load-inputs</span>
<span id="L594" class="LineNr">594 </span><span class="CommentedCode">#? stash [move-cursor] new-row new-column</span>
<span id="L595" class="LineNr">595 </span> <span class="Delimiter">{</span>
<span id="L596" class="LineNr">596 </span> <span class="Conceal">¦</span> <span class="muControl">break-if</span> <a href='081print.mu.html#L16'>screen</a>
@ -707,7 +707,7 @@ if ('onhashchange' in window) {
<span id="L644" class="LineNr">644 </span>
<span id="L645" class="LineNr">645 </span><span class="muRecipe">def</span> <a href='081print.mu.html#L645'>cursor-down</a> <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a><span class="muRecipe"> -&gt; </span><a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a> [
<span id="L646" class="LineNr">646 </span> <span class="Constant">local-scope</span>
<span id="L647" class="LineNr">647 </span> <span class="Constant">load-ingredients</span>
<span id="L647" class="LineNr">647 </span> <span class="Constant">load-inputs</span>
<span id="L648" class="LineNr">648 </span><span class="CommentedCode">#? stash [cursor-down]</span>
<span id="L649" class="LineNr">649 </span> <span class="Delimiter">{</span>
<span id="L650" class="LineNr">650 </span> <span class="Conceal">¦</span> <span class="muControl">break-if</span> <a href='081print.mu.html#L16'>screen</a>
@ -750,7 +750,7 @@ if ('onhashchange' in window) {
<span id="L687" class="LineNr">687 </span>
<span id="L688" class="LineNr">688 </span><span class="muRecipe">def</span> <a href='081print.mu.html#L688'>cursor-up</a> <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a><span class="muRecipe"> -&gt; </span><a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a> [
<span id="L689" class="LineNr">689 </span> <span class="Constant">local-scope</span>
<span id="L690" class="LineNr">690 </span> <span class="Constant">load-ingredients</span>
<span id="L690" class="LineNr">690 </span> <span class="Constant">load-inputs</span>
<span id="L691" class="LineNr">691 </span><span class="CommentedCode">#? stash [cursor-up]</span>
<span id="L692" class="LineNr">692 </span> <span class="Delimiter">{</span>
<span id="L693" class="LineNr">693 </span> <span class="Conceal">¦</span> <span class="muControl">break-if</span> <a href='081print.mu.html#L16'>screen</a>
@ -768,7 +768,7 @@ if ('onhashchange' in window) {
<span id="L705" class="LineNr">705 </span>
<span id="L706" class="LineNr">706 </span><span class="muRecipe">def</span> <a href='081print.mu.html#L706'>cursor-right</a> <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a><span class="muRecipe"> -&gt; </span><a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a> [
<span id="L707" class="LineNr">707 </span> <span class="Constant">local-scope</span>
<span id="L708" class="LineNr">708 </span> <span class="Constant">load-ingredients</span>
<span id="L708" class="LineNr">708 </span> <span class="Constant">load-inputs</span>
<span id="L709" class="LineNr">709 </span><span class="CommentedCode">#? stash [cursor-right]</span>
<span id="L710" class="LineNr">710 </span> <span class="Delimiter">{</span>
<span id="L711" class="LineNr">711 </span> <span class="Conceal">¦</span> <span class="muControl">break-if</span> <a href='081print.mu.html#L16'>screen</a>
@ -788,7 +788,7 @@ if ('onhashchange' in window) {
<span id="L725" class="LineNr">725 </span>
<span id="L726" class="LineNr">726 </span><span class="muRecipe">def</span> <a href='081print.mu.html#L726'>cursor-left</a> <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a><span class="muRecipe"> -&gt; </span><a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a> [
<span id="L727" class="LineNr">727 </span> <span class="Constant">local-scope</span>
<span id="L728" class="LineNr">728 </span> <span class="Constant">load-ingredients</span>
<span id="L728" class="LineNr">728 </span> <span class="Constant">load-inputs</span>
<span id="L729" class="LineNr">729 </span><span class="CommentedCode">#? stash [cursor-left]</span>
<span id="L730" class="LineNr">730 </span> <span class="Delimiter">{</span>
<span id="L731" class="LineNr">731 </span> <span class="Conceal">¦</span> <span class="muControl">break-if</span> <a href='081print.mu.html#L16'>screen</a>
@ -806,7 +806,7 @@ if ('onhashchange' in window) {
<span id="L743" class="LineNr">743 </span>
<span id="L744" class="LineNr">744 </span><span class="muRecipe">def</span> <a href='081print.mu.html#L744'>cursor-to-start-of-line</a> <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a><span class="muRecipe"> -&gt; </span><a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a> [
<span id="L745" class="LineNr">745 </span> <span class="Constant">local-scope</span>
<span id="L746" class="LineNr">746 </span> <span class="Constant">load-ingredients</span>
<span id="L746" class="LineNr">746 </span> <span class="Constant">load-inputs</span>
<span id="L747" class="LineNr">747 </span><span class="CommentedCode">#? stash [cursor-to-start-of-line]</span>
<span id="L748" class="LineNr">748 </span> row:num <span class="Special">&lt;-</span> <a href='081print.mu.html#L577'>cursor-position</a> <a href='081print.mu.html#L16'>screen</a>
<span id="L749" class="LineNr">749 </span> <a href='081print.mu.html#L16'>screen</a> <span class="Special">&lt;-</span> <a href='081print.mu.html#L591'>move-cursor</a> <a href='081print.mu.html#L16'>screen</a>, row, <span class="Constant">0/column</span>
@ -814,7 +814,7 @@ if ('onhashchange' in window) {
<span id="L751" class="LineNr">751 </span>
<span id="L752" class="LineNr">752 </span><span class="muRecipe">def</span> <a href='081print.mu.html#L752'>cursor-to-next-line</a> <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a><span class="muRecipe"> -&gt; </span><a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a> [
<span id="L753" class="LineNr">753 </span> <span class="Constant">local-scope</span>
<span id="L754" class="LineNr">754 </span> <span class="Constant">load-ingredients</span>
<span id="L754" class="LineNr">754 </span> <span class="Constant">load-inputs</span>
<span id="L755" class="LineNr">755 </span><span class="CommentedCode">#? stash [cursor-to-next-line]</span>
<span id="L756" class="LineNr">756 </span> <a href='081print.mu.html#L16'>screen</a> <span class="Special">&lt;-</span> <a href='081print.mu.html#L645'>cursor-down</a> <a href='081print.mu.html#L16'>screen</a>
<span id="L757" class="LineNr">757 </span> <a href='081print.mu.html#L16'>screen</a> <span class="Special">&lt;-</span> <a href='081print.mu.html#L744'>cursor-to-start-of-line</a> <a href='081print.mu.html#L16'>screen</a>
@ -822,7 +822,7 @@ if ('onhashchange' in window) {
<span id="L759" class="LineNr">759 </span>
<span id="L760" class="LineNr">760 </span><span class="muRecipe">def</span> <a href='081print.mu.html#L760'>move-cursor-to-column</a> <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a>, column:num<span class="muRecipe"> -&gt; </span><a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a> [
<span id="L761" class="LineNr">761 </span> <span class="Constant">local-scope</span>
<span id="L762" class="LineNr">762 </span> <span class="Constant">load-ingredients</span>
<span id="L762" class="LineNr">762 </span> <span class="Constant">load-inputs</span>
<span id="L763" class="LineNr">763 </span> row:num, _ <span class="Special">&lt;-</span> <a href='081print.mu.html#L577'>cursor-position</a> <a href='081print.mu.html#L16'>screen</a>
<span id="L764" class="LineNr">764 </span><span class="CommentedCode">#? stash [move-cursor-to-column] row</span>
<span id="L765" class="LineNr">765 </span> <a href='081print.mu.html#L591'>move-cursor</a> <a href='081print.mu.html#L16'>screen</a>, row, column
@ -830,7 +830,7 @@ if ('onhashchange' in window) {
<span id="L767" class="LineNr">767 </span>
<span id="L768" class="LineNr">768 </span><span class="muRecipe">def</span> <a href='081print.mu.html#L768'>screen-width</a> <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a><span class="muRecipe"> -&gt; </span>width:num [
<span id="L769" class="LineNr">769 </span> <span class="Constant">local-scope</span>
<span id="L770" class="LineNr">770 </span> <span class="Constant">load-ingredients</span>
<span id="L770" class="LineNr">770 </span> <span class="Constant">load-inputs</span>
<span id="L771" class="LineNr">771 </span><span class="CommentedCode">#? stash [screen-width]</span>
<span id="L772" class="LineNr">772 </span> <span class="Delimiter">{</span>
<span id="L773" class="LineNr">773 </span> <span class="Conceal">¦</span> <span class="muControl">break-unless</span> <a href='081print.mu.html#L16'>screen</a>
@ -844,7 +844,7 @@ if ('onhashchange' in window) {
<span id="L781" class="LineNr">781 </span>
<span id="L782" class="LineNr">782 </span><span class="muRecipe">def</span> <a href='081print.mu.html#L782'>screen-height</a> <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a><span class="muRecipe"> -&gt; </span>height:num [
<span id="L783" class="LineNr">783 </span> <span class="Constant">local-scope</span>
<span id="L784" class="LineNr">784 </span> <span class="Constant">load-ingredients</span>
<span id="L784" class="LineNr">784 </span> <span class="Constant">load-inputs</span>
<span id="L785" class="LineNr">785 </span><span class="CommentedCode">#? stash [screen-height]</span>
<span id="L786" class="LineNr">786 </span> <span class="Delimiter">{</span>
<span id="L787" class="LineNr">787 </span> <span class="Conceal">¦</span> <span class="muControl">break-unless</span> <a href='081print.mu.html#L16'>screen</a>
@ -858,14 +858,14 @@ if ('onhashchange' in window) {
<span id="L795" class="LineNr">795 </span>
<span id="L796" class="LineNr">796 </span><span class="muRecipe">def</span> print <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a>, s:text<span class="muRecipe"> -&gt; </span><a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a> [
<span id="L797" class="LineNr">797 </span> <span class="Constant">local-scope</span>
<span id="L798" class="LineNr">798 </span> <span class="Constant">load-ingredients</span>
<span id="L799" class="LineNr">799 </span> color:num, color-found?:bool <span class="Special">&lt;-</span> <span class="Constant">next-ingredient</span>
<span id="L798" class="LineNr">798 </span> <span class="Constant">load-inputs</span>
<span id="L799" class="LineNr">799 </span> color:num, color-found?:bool <span class="Special">&lt;-</span> <span class="Constant">next-input</span>
<span id="L800" class="LineNr">800 </span> <span class="Delimiter">{</span>
<span id="L801" class="LineNr">801 </span> <span class="Conceal">¦</span> <span class="Comment"># default color to white</span>
<span id="L802" class="LineNr">802 </span> <span class="Conceal">¦</span> <span class="muControl">break-if</span> color-found?
<span id="L803" class="LineNr">803 </span> <span class="Conceal">¦</span> color <span class="Special">&lt;-</span> copy <span class="Constant">7/white</span>
<span id="L804" class="LineNr">804 </span> <span class="Delimiter">}</span>
<span id="L805" class="LineNr">805 </span> bg-color:num, bg-color-found?:bool <span class="Special">&lt;-</span> <span class="Constant">next-ingredient</span>
<span id="L805" class="LineNr">805 </span> bg-color:num, bg-color-found?:bool <span class="Special">&lt;-</span> <span class="Constant">next-input</span>
<span id="L806" class="LineNr">806 </span> <span class="Delimiter">{</span>
<span id="L807" class="LineNr">807 </span> <span class="Conceal">¦</span> <span class="Comment"># default bg-color to black</span>
<span id="L808" class="LineNr">808 </span> <span class="Conceal">¦</span> <span class="muControl">break-if</span> bg-color-found?
@ -914,14 +914,14 @@ if ('onhashchange' in window) {
<span id="L851" class="LineNr">851 </span>
<span id="L852" class="LineNr">852 </span><span class="muRecipe">def</span> print <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a>, n:num<span class="muRecipe"> -&gt; </span><a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a> [
<span id="L853" class="LineNr">853 </span> <span class="Constant">local-scope</span>
<span id="L854" class="LineNr">854 </span> <span class="Constant">load-ingredients</span>
<span id="L855" class="LineNr">855 </span> color:num, color-found?:bool <span class="Special">&lt;-</span> <span class="Constant">next-ingredient</span>
<span id="L854" class="LineNr">854 </span> <span class="Constant">load-inputs</span>
<span id="L855" class="LineNr">855 </span> color:num, color-found?:bool <span class="Special">&lt;-</span> <span class="Constant">next-input</span>
<span id="L856" class="LineNr">856 </span> <span class="Delimiter">{</span>
<span id="L857" class="LineNr">857 </span> <span class="Conceal">¦</span> <span class="Comment"># default color to white</span>
<span id="L858" class="LineNr">858 </span> <span class="Conceal">¦</span> <span class="muControl">break-if</span> color-found?
<span id="L859" class="LineNr">859 </span> <span class="Conceal">¦</span> color <span class="Special">&lt;-</span> copy <span class="Constant">7/white</span>
<span id="L860" class="LineNr">860 </span> <span class="Delimiter">}</span>
<span id="L861" class="LineNr">861 </span> bg-color:num, bg-color-found?:bool <span class="Special">&lt;-</span> <span class="Constant">next-ingredient</span>
<span id="L861" class="LineNr">861 </span> bg-color:num, bg-color-found?:bool <span class="Special">&lt;-</span> <span class="Constant">next-input</span>
<span id="L862" class="LineNr">862 </span> <span class="Delimiter">{</span>
<span id="L863" class="LineNr">863 </span> <span class="Conceal">¦</span> <span class="Comment"># default bg-color to black</span>
<span id="L864" class="LineNr">864 </span> <span class="Conceal">¦</span> <span class="muControl">break-if</span> bg-color-found?
@ -934,14 +934,14 @@ if ('onhashchange' in window) {
<span id="L871" class="LineNr">871 </span>
<span id="L872" class="LineNr">872 </span><span class="muRecipe">def</span> print <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a>, n:bool<span class="muRecipe"> -&gt; </span><a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a> [
<span id="L873" class="LineNr">873 </span> <span class="Constant">local-scope</span>
<span id="L874" class="LineNr">874 </span> <span class="Constant">load-ingredients</span>
<span id="L875" class="LineNr">875 </span> color:num, color-found?:bool <span class="Special">&lt;-</span> <span class="Constant">next-ingredient</span>
<span id="L874" class="LineNr">874 </span> <span class="Constant">load-inputs</span>
<span id="L875" class="LineNr">875 </span> color:num, color-found?:bool <span class="Special">&lt;-</span> <span class="Constant">next-input</span>
<span id="L876" class="LineNr">876 </span> <span class="Delimiter">{</span>
<span id="L877" class="LineNr">877 </span> <span class="Conceal">¦</span> <span class="Comment"># default color to white</span>
<span id="L878" class="LineNr">878 </span> <span class="Conceal">¦</span> <span class="muControl">break-if</span> color-found?
<span id="L879" class="LineNr">879 </span> <span class="Conceal">¦</span> color <span class="Special">&lt;-</span> copy <span class="Constant">7/white</span>
<span id="L880" class="LineNr">880 </span> <span class="Delimiter">}</span>
<span id="L881" class="LineNr">881 </span> bg-color:num, bg-color-found?:bool <span class="Special">&lt;-</span> <span class="Constant">next-ingredient</span>
<span id="L881" class="LineNr">881 </span> bg-color:num, bg-color-found?:bool <span class="Special">&lt;-</span> <span class="Constant">next-input</span>
<span id="L882" class="LineNr">882 </span> <span class="Delimiter">{</span>
<span id="L883" class="LineNr">883 </span> <span class="Conceal">¦</span> <span class="Comment"># default bg-color to black</span>
<span id="L884" class="LineNr">884 </span> <span class="Conceal">¦</span> <span class="muControl">break-if</span> bg-color-found?
@ -953,14 +953,14 @@ if ('onhashchange' in window) {
<span id="L890" class="LineNr">890 </span>
<span id="L891" class="LineNr">891 </span><span class="muRecipe">def</span> print <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a>, n:&amp;:_elem<span class="muRecipe"> -&gt; </span><a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a> [
<span id="L892" class="LineNr">892 </span> <span class="Constant">local-scope</span>
<span id="L893" class="LineNr">893 </span> <span class="Constant">load-ingredients</span>
<span id="L894" class="LineNr">894 </span> color:num, color-found?:bool <span class="Special">&lt;-</span> <span class="Constant">next-ingredient</span>
<span id="L893" class="LineNr">893 </span> <span class="Constant">load-inputs</span>
<span id="L894" class="LineNr">894 </span> color:num, color-found?:bool <span class="Special">&lt;-</span> <span class="Constant">next-input</span>
<span id="L895" class="LineNr">895 </span> <span class="Delimiter">{</span>
<span id="L896" class="LineNr">896 </span> <span class="Conceal">¦</span> <span class="Comment"># default color to white</span>
<span id="L897" class="LineNr">897 </span> <span class="Conceal">¦</span> <span class="muControl">break-if</span> color-found?
<span id="L898" class="LineNr">898 </span> <span class="Conceal">¦</span> color <span class="Special">&lt;-</span> copy <span class="Constant">7/white</span>
<span id="L899" class="LineNr">899 </span> <span class="Delimiter">}</span>
<span id="L900" class="LineNr">900 </span> bg-color:num, bg-color-found?:bool <span class="Special">&lt;-</span> <span class="Constant">next-ingredient</span>
<span id="L900" class="LineNr">900 </span> bg-color:num, bg-color-found?:bool <span class="Special">&lt;-</span> <span class="Constant">next-input</span>
<span id="L901" class="LineNr">901 </span> <span class="Delimiter">{</span>
<span id="L902" class="LineNr">902 </span> <span class="Conceal">¦</span> <span class="Comment"># default bg-color to black</span>
<span id="L903" class="LineNr">903 </span> <span class="Conceal">¦</span> <span class="muControl">break-if</span> bg-color-found?

View File

@ -315,19 +315,19 @@ if ('onhashchange' in window) {
<span id="L250" class="LineNr">250 </span>
<span id="L251" class="LineNr">251 </span><span class="Delimiter">:(code)</span>
<span id="L252" class="LineNr">252 </span><span class="Normal">void</span> check_screen<span class="Delimiter">(</span><span class="Normal">const</span> string&amp; expected_contents<span class="Delimiter">,</span> <span class="Normal">const</span> <span class="Normal">int</span> color<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L253" class="LineNr">253 </span> <span class="Normal">int</span> screen_location = <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> SCREEN<span class="Delimiter">)</span>+<span class="Comment">/*</span><span class="Comment">skip refcount</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">;</span>
<span id="L253" class="LineNr">253 </span> <span class="Normal">int</span> screen_location = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> SCREEN<span class="Delimiter">)</span>+<span class="Comment">/*</span><span class="Comment">skip refcount</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">;</span>
<span id="L254" class="LineNr">254 </span> <span class="Normal">int</span> data_offset = <a href='042name.cc.html#L140'>find_element_name</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;screen&quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;data&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">);</span>
<span id="L255" class="LineNr">255 </span> assert<span class="Delimiter">(</span>data_offset &gt;= <span class="Constant">0</span><span class="Delimiter">);</span>
<span id="L256" class="LineNr">256 </span> <span class="Normal">int</span> screen_data_location = screen_location+data_offset<span class="Delimiter">;</span> <span class="Comment">// type: address:array:character</span>
<span id="L257" class="LineNr">257 </span> <span class="Normal">int</span> screen_data_start = <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> screen_data_location<span class="Delimiter">)</span> + <span class="Comment">/*</span><span class="Comment">skip refcount</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">;</span> <span class="Comment">// type: array:character</span>
<span id="L257" class="LineNr">257 </span> <span class="Normal">int</span> screen_data_start = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> screen_data_location<span class="Delimiter">)</span> + <span class="Comment">/*</span><span class="Comment">skip refcount</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">;</span> <span class="Comment">// type: array:character</span>
<span id="L258" class="LineNr">258 </span> <span class="Normal">int</span> width_offset = <a href='042name.cc.html#L140'>find_element_name</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;screen&quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;num-columns&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">);</span>
<span id="L259" class="LineNr">259 </span> <span class="Normal">int</span> screen_width = <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> screen_location+width_offset<span class="Delimiter">);</span>
<span id="L259" class="LineNr">259 </span> <span class="Normal">int</span> screen_width = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> screen_location+width_offset<span class="Delimiter">);</span>
<span id="L260" class="LineNr">260 </span> <span class="Normal">int</span> height_offset = <a href='042name.cc.html#L140'>find_element_name</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;screen&quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;num-rows&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">);</span>
<span id="L261" class="LineNr">261 </span> <span class="Normal">int</span> screen_height = <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> screen_location+height_offset<span class="Delimiter">);</span>
<span id="L261" class="LineNr">261 </span> <span class="Normal">int</span> screen_height = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> screen_location+height_offset<span class="Delimiter">);</span>
<span id="L262" class="LineNr">262 </span> raw_string_stream cursor<span class="Delimiter">(</span>expected_contents<span class="Delimiter">);</span>
<span id="L263" class="LineNr">263 </span> <span class="Comment">// todo: too-long expected_contents should fail</span>
<span id="L264" class="LineNr">264 </span> <span class="Normal">int</span> top_index_offset = <a href='042name.cc.html#L140'>find_element_name</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;screen&quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;top-idx&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">);</span>
<span id="L265" class="LineNr">265 </span> <span class="Normal">int</span> top_index = <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> screen_location+top_index_offset<span class="Delimiter">);</span>
<span id="L265" class="LineNr">265 </span> <span class="Normal">int</span> top_index = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> screen_location+top_index_offset<span class="Delimiter">);</span>
<span id="L266" class="LineNr">266 </span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i=<span class="Constant">0</span><span class="Delimiter">,</span> row=top_index/screen_width<span class="Delimiter">;</span> i &lt; screen_height<span class="Delimiter">;</span> ++i<span class="Delimiter">,</span> row=<span class="Delimiter">(</span>row+<span class="Constant">1</span><span class="Delimiter">)</span>%screen_height<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L267" class="LineNr">267 </span> <span class="Conceal">¦</span> cursor<span class="Delimiter">.</span><a href='011load.cc.html#L209'>skip_whitespace_and_comments</a><span class="Delimiter">();</span>
<span id="L268" class="LineNr">268 </span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>cursor<span class="Delimiter">.</span>at_end<span class="Delimiter">())</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
@ -340,16 +340,16 @@ if ('onhashchange' in window) {
<span id="L275" class="LineNr">275 </span> <span class="Conceal">¦</span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> column = <span class="Constant">0</span><span class="Delimiter">;</span> column &lt; screen_width<span class="Delimiter">;</span> ++column<span class="Delimiter">,</span> addr+= <span class="Comment">/*</span><span class="Comment">size of screen-cell</span><span class="Comment">*/</span><span class="Constant">2</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L276" class="LineNr">276 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">const</span> <span class="Normal">int</span> cell_color_offset = <span class="Constant">1</span><span class="Delimiter">;</span>
<span id="L277" class="LineNr">277 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">uint32_t</span> curr = cursor<span class="Delimiter">.</span>get<span class="Delimiter">();</span>
<span id="L278" class="LineNr">278 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> addr<span class="Delimiter">)</span> == <span class="Constant">0</span> &amp;&amp; isspace<span class="Delimiter">(</span>curr<span class="Delimiter">))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
<span id="L279" class="LineNr">279 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>curr == <span class="Constant">' '</span> &amp;&amp; color != -<span class="Constant">1</span> &amp;&amp; color != <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> addr+cell_color_offset<span class="Delimiter">))</span> <span class="Delimiter">{</span>
<span id="L278" class="LineNr">278 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> addr<span class="Delimiter">)</span> == <span class="Constant">0</span> &amp;&amp; isspace<span class="Delimiter">(</span>curr<span class="Delimiter">))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
<span id="L279" class="LineNr">279 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>curr == <span class="Constant">' '</span> &amp;&amp; color != -<span class="Constant">1</span> &amp;&amp; color != <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> addr+cell_color_offset<span class="Delimiter">))</span> <span class="Delimiter">{</span>
<span id="L280" class="LineNr">280 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Comment">// filter out other colors</span>
<span id="L281" class="LineNr">281 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
<span id="L282" class="LineNr">282 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>
<span id="L283" class="LineNr">283 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> addr<span class="Delimiter">)</span> != <span class="Constant">0</span> &amp;&amp; <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> addr<span class="Delimiter">)</span> == curr<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L284" class="LineNr">284 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>color == -<span class="Constant">1</span> || color == <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> addr+cell_color_offset<span class="Delimiter">))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
<span id="L283" class="LineNr">283 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> addr<span class="Delimiter">)</span> != <span class="Constant">0</span> &amp;&amp; <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> addr<span class="Delimiter">)</span> == curr<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L284" class="LineNr">284 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>color == -<span class="Constant">1</span> || color == <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> addr+cell_color_offset<span class="Delimiter">))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
<span id="L285" class="LineNr">285 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Comment">// contents match but color is off</span>
<span id="L286" class="LineNr">286 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!Hide_errors<span class="Delimiter">)</span> cerr &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
<span id="L287" class="LineNr">287 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;F - &quot;</span> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span><a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;expected screen location (&quot;</span> &lt;&lt; row &lt;&lt; <span class="Constant">&quot;, &quot;</span> &lt;&lt; column &lt;&lt; <span class="Constant">&quot;) to contain '&quot;</span> &lt;&lt; unicode_character_at<span class="Delimiter">(</span>addr<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;' in color &quot;</span> &lt;&lt; color &lt;&lt; <span class="Constant">&quot; instead of &quot;</span> &lt;&lt; no_scientific<span class="Delimiter">(</span><a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> addr+cell_color_offset<span class="Delimiter">))</span> &lt;&lt; <span class="Constant">&quot;</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L287" class="LineNr">287 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;F - &quot;</span> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span><a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;expected screen location (&quot;</span> &lt;&lt; row &lt;&lt; <span class="Constant">&quot;, &quot;</span> &lt;&lt; column &lt;&lt; <span class="Constant">&quot;) to contain '&quot;</span> &lt;&lt; unicode_character_at<span class="Delimiter">(</span>addr<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;' in color &quot;</span> &lt;&lt; color &lt;&lt; <span class="Constant">&quot; instead of &quot;</span> &lt;&lt; no_scientific<span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> addr+cell_color_offset<span class="Delimiter">))</span> &lt;&lt; <span class="Constant">&quot;</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L288" class="LineNr">288 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!Hide_errors<span class="Delimiter">)</span> dump_screen<span class="Delimiter">();</span>
<span id="L289" class="LineNr">289 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!Scenario_testing_scenario<span class="Delimiter">)</span> Passed = <span class="Constant">false</span><span class="Delimiter">;</span>
<span id="L290" class="LineNr">290 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
@ -363,15 +363,15 @@ if ('onhashchange' in window) {
<span id="L298" class="LineNr">298 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> expected_pretty[<span class="Constant">0</span>] = <span class="Constant">' '</span><span class="Delimiter">,</span> expected_pretty[<span class="Constant">1</span>] = <span class="Constant">'('</span><span class="Delimiter">,</span> expected_pretty[<span class="Constant">2</span>] = <span class="cSpecial">'\''</span><span class="Delimiter">,</span> expected_pretty[<span class="Constant">3</span>] = <span class="Normal">static_cast</span>&lt;<span class="Normal">unsigned</span> <span class="Normal">char</span>&gt;<span class="Delimiter">(</span>curr<span class="Delimiter">),</span> expected_pretty[<span class="Constant">4</span>] = <span class="cSpecial">'\''</span><span class="Delimiter">,</span> expected_pretty[<span class="Constant">5</span>] = <span class="Constant">')'</span><span class="Delimiter">,</span> expected_pretty[<span class="Constant">6</span>] = <span class="cSpecial">'\0'</span><span class="Delimiter">;</span>
<span id="L299" class="LineNr">299 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>
<span id="L300" class="LineNr">300 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">char</span> actual_pretty[<span class="Constant">10</span>] = <span class="Delimiter">{</span><span class="Constant">0</span><span class="Delimiter">};</span>
<span id="L301" class="LineNr">301 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> addr<span class="Delimiter">)</span> &lt; <span class="Constant">256</span> &amp;&amp; !iscntrl<span class="Delimiter">(</span><a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> addr<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
<span id="L301" class="LineNr">301 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> addr<span class="Delimiter">)</span> &lt; <span class="Constant">256</span> &amp;&amp; !iscntrl<span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> addr<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
<span id="L302" class="LineNr">302 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Comment">// &quot; ('&lt;curr&gt;')&quot;</span>
<span id="L303" class="LineNr">303 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> actual_pretty[<span class="Constant">0</span>] = <span class="Constant">' '</span><span class="Delimiter">,</span> actual_pretty[<span class="Constant">1</span>] = <span class="Constant">'('</span><span class="Delimiter">,</span> actual_pretty[<span class="Constant">2</span>] = <span class="cSpecial">'\''</span><span class="Delimiter">,</span> actual_pretty[<span class="Constant">3</span>] = <span class="Normal">static_cast</span>&lt;<span class="Normal">unsigned</span> <span class="Normal">char</span>&gt;<span class="Delimiter">(</span><a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> addr<span class="Delimiter">)),</span> actual_pretty[<span class="Constant">4</span>] = <span class="cSpecial">'\''</span><span class="Delimiter">,</span> actual_pretty[<span class="Constant">5</span>] = <span class="Constant">')'</span><span class="Delimiter">,</span> actual_pretty[<span class="Constant">6</span>] = <span class="cSpecial">'\0'</span><span class="Delimiter">;</span>
<span id="L303" class="LineNr">303 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> actual_pretty[<span class="Constant">0</span>] = <span class="Constant">' '</span><span class="Delimiter">,</span> actual_pretty[<span class="Constant">1</span>] = <span class="Constant">'('</span><span class="Delimiter">,</span> actual_pretty[<span class="Constant">2</span>] = <span class="cSpecial">'\''</span><span class="Delimiter">,</span> actual_pretty[<span class="Constant">3</span>] = <span class="Normal">static_cast</span>&lt;<span class="Normal">unsigned</span> <span class="Normal">char</span>&gt;<span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> addr<span class="Delimiter">)),</span> actual_pretty[<span class="Constant">4</span>] = <span class="cSpecial">'\''</span><span class="Delimiter">,</span> actual_pretty[<span class="Constant">5</span>] = <span class="Constant">')'</span><span class="Delimiter">,</span> actual_pretty[<span class="Constant">6</span>] = <span class="cSpecial">'\0'</span><span class="Delimiter">;</span>
<span id="L304" class="LineNr">304 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>
<span id="L305" class="LineNr">305 </span>
<span id="L306" class="LineNr">306 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> ostringstream color_phrase<span class="Delimiter">;</span>
<span id="L307" class="LineNr">307 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>color != -<span class="Constant">1</span><span class="Delimiter">)</span> color_phrase &lt;&lt; <span class="Constant">&quot; in color &quot;</span> &lt;&lt; color<span class="Delimiter">;</span>
<span id="L308" class="LineNr">308 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!Hide_errors<span class="Delimiter">)</span> cerr &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
<span id="L309" class="LineNr">309 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;F - &quot;</span> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span><a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;expected screen location (&quot;</span> &lt;&lt; row &lt;&lt; <span class="Constant">&quot;, &quot;</span> &lt;&lt; column &lt;&lt; <span class="Constant">&quot;) to contain &quot;</span> &lt;&lt; curr &lt;&lt; expected_pretty &lt;&lt; color_phrase<span class="Delimiter">.</span>str<span class="Delimiter">()</span> &lt;&lt; <span class="Constant">&quot; instead of &quot;</span> &lt;&lt; no_scientific<span class="Delimiter">(</span><a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> addr<span class="Delimiter">))</span> &lt;&lt; actual_pretty &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L309" class="LineNr">309 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;F - &quot;</span> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span><a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;expected screen location (&quot;</span> &lt;&lt; row &lt;&lt; <span class="Constant">&quot;, &quot;</span> &lt;&lt; column &lt;&lt; <span class="Constant">&quot;) to contain &quot;</span> &lt;&lt; curr &lt;&lt; expected_pretty &lt;&lt; color_phrase<span class="Delimiter">.</span>str<span class="Delimiter">()</span> &lt;&lt; <span class="Constant">&quot; instead of &quot;</span> &lt;&lt; no_scientific<span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> addr<span class="Delimiter">))</span> &lt;&lt; actual_pretty &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L310" class="LineNr">310 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!Hide_errors<span class="Delimiter">)</span> dump_screen<span class="Delimiter">();</span>
<span id="L311" class="LineNr">311 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!Scenario_testing_scenario<span class="Delimiter">)</span> Passed = <span class="Constant">false</span><span class="Delimiter">;</span>
<span id="L312" class="LineNr">312 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
@ -390,7 +390,7 @@ if ('onhashchange' in window) {
<span id="L325" class="LineNr">325 </span><span class="Delimiter">}</span>
<span id="L326" class="LineNr">326 </span>
<span id="L327" class="LineNr">327 </span><span class="Normal">const</span> <span class="Normal">char</span>* unicode_character_at<span class="Delimiter">(</span><span class="Normal">int</span> addr<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L328" class="LineNr">328 </span> <span class="Normal">int</span> unicode_code_point = <span class="Normal">static_cast</span>&lt;<span class="Normal">int</span>&gt;<span class="Delimiter">(</span><a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> addr<span class="Delimiter">));</span>
<span id="L328" class="LineNr">328 </span> <span class="Normal">int</span> unicode_code_point = <span class="Normal">static_cast</span>&lt;<span class="Normal">int</span>&gt;<span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> addr<span class="Delimiter">));</span>
<span id="L329" class="LineNr">329 </span> <span class="Identifier">return</span> to_unicode<span class="Delimiter">(</span>unicode_code_point<span class="Delimiter">);</span>
<span id="L330" class="LineNr">330 </span><span class="Delimiter">}</span>
<span id="L331" class="LineNr">331 </span>
@ -450,24 +450,24 @@ if ('onhashchange' in window) {
<span id="L385" class="LineNr">385 </span>
<span id="L386" class="LineNr">386 </span><span class="Delimiter">:(code)</span>
<span id="L387" class="LineNr">387 </span><span class="Normal">void</span> dump_screen<span class="Delimiter">()</span> <span class="Delimiter">{</span>
<span id="L388" class="LineNr">388 </span> <span class="Normal">int</span> screen_location = <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> SCREEN<span class="Delimiter">)</span> + <span class="Comment">/*</span><span class="Comment">skip refcount</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">;</span>
<span id="L388" class="LineNr">388 </span> <span class="Normal">int</span> screen_location = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> SCREEN<span class="Delimiter">)</span> + <span class="Comment">/*</span><span class="Comment">skip refcount</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">;</span>
<span id="L389" class="LineNr">389 </span> <span class="Normal">int</span> width_offset = <a href='042name.cc.html#L140'>find_element_name</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;screen&quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;num-columns&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">);</span>
<span id="L390" class="LineNr">390 </span> <span class="Normal">int</span> screen_width = <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> screen_location+width_offset<span class="Delimiter">);</span>
<span id="L390" class="LineNr">390 </span> <span class="Normal">int</span> screen_width = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> screen_location+width_offset<span class="Delimiter">);</span>
<span id="L391" class="LineNr">391 </span> <span class="Normal">int</span> height_offset = <a href='042name.cc.html#L140'>find_element_name</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;screen&quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;num-rows&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">);</span>
<span id="L392" class="LineNr">392 </span> <span class="Normal">int</span> screen_height = <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> screen_location+height_offset<span class="Delimiter">);</span>
<span id="L392" class="LineNr">392 </span> <span class="Normal">int</span> screen_height = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> screen_location+height_offset<span class="Delimiter">);</span>
<span id="L393" class="LineNr">393 </span> <span class="Normal">int</span> data_offset = <a href='042name.cc.html#L140'>find_element_name</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;screen&quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;data&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">);</span>
<span id="L394" class="LineNr">394 </span> assert<span class="Delimiter">(</span>data_offset &gt;= <span class="Constant">0</span><span class="Delimiter">);</span>
<span id="L395" class="LineNr">395 </span> <span class="Normal">int</span> screen_data_location = screen_location+data_offset<span class="Delimiter">;</span> <span class="Comment">// type: address:array:character</span>
<span id="L396" class="LineNr">396 </span> <span class="Normal">int</span> screen_data_start = <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> screen_data_location<span class="Delimiter">)</span> + <span class="Comment">/*</span><span class="Comment">skip refcount</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">;</span> <span class="Comment">// type: array:character</span>
<span id="L397" class="LineNr">397 </span> assert<span class="Delimiter">(</span><a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> screen_data_start<span class="Delimiter">)</span> == screen_width*screen_height<span class="Delimiter">);</span>
<span id="L396" class="LineNr">396 </span> <span class="Normal">int</span> screen_data_start = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> screen_data_location<span class="Delimiter">)</span> + <span class="Comment">/*</span><span class="Comment">skip refcount</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">;</span> <span class="Comment">// type: array:character</span>
<span id="L397" class="LineNr">397 </span> assert<span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> screen_data_start<span class="Delimiter">)</span> == screen_width*screen_height<span class="Delimiter">);</span>
<span id="L398" class="LineNr">398 </span> <span class="Normal">int</span> top_index_offset = <a href='042name.cc.html#L140'>find_element_name</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;screen&quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;top-idx&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">);</span>
<span id="L399" class="LineNr">399 </span> <span class="Normal">int</span> top_index = <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> screen_location+top_index_offset<span class="Delimiter">);</span>
<span id="L399" class="LineNr">399 </span> <span class="Normal">int</span> top_index = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> screen_location+top_index_offset<span class="Delimiter">);</span>
<span id="L400" class="LineNr">400 </span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i=<span class="Constant">0</span><span class="Delimiter">,</span> row=top_index/screen_width<span class="Delimiter">;</span> i &lt; screen_height<span class="Delimiter">;</span> ++i<span class="Delimiter">,</span> row=<span class="Delimiter">(</span>row+<span class="Constant">1</span><span class="Delimiter">)</span>%screen_height<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L401" class="LineNr">401 </span> <span class="Conceal">¦</span> cerr &lt;&lt; <span class="Constant">'.'</span><span class="Delimiter">;</span>
<span id="L402" class="LineNr">402 </span> <span class="Conceal">¦</span> <span class="Normal">int</span> curr = screen_data_start+<span class="Comment">/*</span><span class="Comment">length</span><span class="Comment">*/</span><span class="Constant">1</span>+row*screen_width* <span class="Comment">/*</span><span class="Comment">size of screen-cell</span><span class="Comment">*/</span><span class="Constant">2</span><span class="Delimiter">;</span>
<span id="L403" class="LineNr">403 </span> <span class="Conceal">¦</span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> col = <span class="Constant">0</span><span class="Delimiter">;</span> col &lt; screen_width<span class="Delimiter">;</span> ++col<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L404" class="LineNr">404 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> curr<span class="Delimiter">))</span>
<span id="L405" class="LineNr">405 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> cerr &lt;&lt; to_unicode<span class="Delimiter">(</span><span class="Normal">static_cast</span>&lt;<span class="Normal">uint32_t</span>&gt;<span class="Delimiter">(</span><a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> curr<span class="Delimiter">)));</span>
<span id="L404" class="LineNr">404 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> curr<span class="Delimiter">))</span>
<span id="L405" class="LineNr">405 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> cerr &lt;&lt; to_unicode<span class="Delimiter">(</span><span class="Normal">static_cast</span>&lt;<span class="Normal">uint32_t</span>&gt;<span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> curr<span class="Delimiter">)));</span>
<span id="L406" class="LineNr">406 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">else</span>
<span id="L407" class="LineNr">407 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> cerr &lt;&lt; <span class="Constant">' '</span><span class="Delimiter">;</span>
<span id="L408" class="LineNr">408 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> curr += <span class="Comment">/*</span><span class="Comment">size of screen-cell</span><span class="Comment">*/</span><span class="Constant">2</span><span class="Delimiter">;</span>

View File

@ -88,14 +88,14 @@ if ('onhashchange' in window) {
<span id="L27" class="LineNr"> 27 </span>
<span id="L28" class="LineNr"> 28 </span><span class="muRecipe">def</span> <a href='084console.mu.html#L28'>new-fake-console</a> events:&amp;:@:<a href='084console.mu.html#L4'>event</a><span class="muRecipe"> -&gt; </span>result:&amp;:<a href='084console.mu.html#L23'>console</a> [
<span id="L29" class="LineNr"> 29 </span> <span class="Constant">local-scope</span>
<span id="L30" class="LineNr"> 30 </span> <span class="Constant">load-ingredients</span>
<span id="L30" class="LineNr"> 30 </span> <span class="Constant">load-inputs</span>
<span id="L31" class="LineNr"> 31 </span> result:&amp;:<a href='084console.mu.html#L23'>console</a> <span class="Special">&lt;-</span> new <span class="Constant"><a href='084console.mu.html#L23'>console</a>:type</span>
<span id="L32" class="LineNr"> 32 </span> *result <span class="Special">&lt;-</span> put *result, <span class="Constant">events:offset</span>, events
<span id="L33" class="LineNr"> 33 </span>]
<span id="L34" class="LineNr"> 34 </span>
<span id="L35" class="LineNr"> 35 </span><span class="muRecipe">def</span> <a href='084console.mu.html#L35'>read-event</a> <a href='084console.mu.html#L23'>console</a>:&amp;:<a href='084console.mu.html#L23'>console</a><span class="muRecipe"> -&gt; </span>result:<a href='084console.mu.html#L4'>event</a>, found?:bool, quit?:bool, <a href='084console.mu.html#L23'>console</a>:&amp;:<a href='084console.mu.html#L23'>console</a> [
<span id="L36" class="LineNr"> 36 </span> <span class="Constant">local-scope</span>
<span id="L37" class="LineNr"> 37 </span> <span class="Constant">load-ingredients</span>
<span id="L37" class="LineNr"> 37 </span> <span class="Constant">load-inputs</span>
<span id="L38" class="LineNr"> 38 </span> <span class="Delimiter">{</span>
<span id="L39" class="LineNr"> 39 </span> <span class="Conceal">¦</span> <span class="muControl">break-unless</span> <a href='084console.mu.html#L23'>console</a>
<span id="L40" class="LineNr"> 40 </span> <span class="Conceal">¦</span> current-event-index:num <span class="Special">&lt;-</span> get *console, <span class="Constant">current-event-index:offset</span>
@ -122,7 +122,7 @@ if ('onhashchange' in window) {
<span id="L61" class="LineNr"> 61 </span><span class="Comment"># newlines, tabs, ctrl-d..</span>
<span id="L62" class="LineNr"> 62 </span><span class="muRecipe">def</span> <a href='084console.mu.html#L62'>read-key</a> <a href='084console.mu.html#L23'>console</a>:&amp;:<a href='084console.mu.html#L23'>console</a><span class="muRecipe"> -&gt; </span>result:char, found?:bool, quit?:bool, <a href='084console.mu.html#L23'>console</a>:&amp;:<a href='084console.mu.html#L23'>console</a> [
<span id="L63" class="LineNr"> 63 </span> <span class="Constant">local-scope</span>
<span id="L64" class="LineNr"> 64 </span> <span class="Constant">load-ingredients</span>
<span id="L64" class="LineNr"> 64 </span> <span class="Constant">load-inputs</span>
<span id="L65" class="LineNr"> 65 </span> x:<a href='084console.mu.html#L4'>event</a>, found?:bool, quit?:bool, <a href='084console.mu.html#L23'>console</a> <span class="Special">&lt;-</span> <a href='084console.mu.html#L35'>read-event</a> <a href='084console.mu.html#L23'>console</a>
<span id="L66" class="LineNr"> 66 </span> <span class="muControl">return-if</span> quit?,<span class="Constant"> 0</span>, found?, quit?
<span id="L67" class="LineNr"> 67 </span> <span class="muControl">return-unless</span> found?,<span class="Constant"> 0</span>, found?, quit?
@ -133,7 +133,7 @@ if ('onhashchange' in window) {
<span id="L72" class="LineNr"> 72 </span>
<span id="L73" class="LineNr"> 73 </span><span class="muRecipe">def</span> <a href='084console.mu.html#L73'>send-keys-to-channel</a> <a href='084console.mu.html#L23'>console</a>:&amp;:<a href='084console.mu.html#L23'>console</a>, chan:&amp;:<a href='075channel.mu.html#L47'>sink</a>:char, <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a><span class="muRecipe"> -&gt; </span><a href='084console.mu.html#L23'>console</a>:&amp;:<a href='084console.mu.html#L23'>console</a>, chan:&amp;:<a href='075channel.mu.html#L47'>sink</a>:char, <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a> [
<span id="L74" class="LineNr"> 74 </span> <span class="Constant">local-scope</span>
<span id="L75" class="LineNr"> 75 </span> <span class="Constant">load-ingredients</span>
<span id="L75" class="LineNr"> 75 </span> <span class="Constant">load-inputs</span>
<span id="L76" class="LineNr"> 76 </span> <span class="Delimiter">{</span>
<span id="L77" class="LineNr"> 77 </span> <span class="Conceal">¦</span> c:char, found?:bool, quit?:bool, <a href='084console.mu.html#L23'>console</a> <span class="Special">&lt;-</span> <a href='084console.mu.html#L62'>read-key</a> <a href='084console.mu.html#L23'>console</a>
<span id="L78" class="LineNr"> 78 </span> <span class="Conceal">¦</span> <span class="muControl">loop-unless</span> found?
@ -148,7 +148,7 @@ if ('onhashchange' in window) {
<span id="L87" class="LineNr"> 87 </span>
<span id="L88" class="LineNr"> 88 </span><span class="muRecipe">def</span> <a href='084console.mu.html#L88'>wait-for-event</a> <a href='084console.mu.html#L23'>console</a>:&amp;:<a href='084console.mu.html#L23'>console</a><span class="muRecipe"> -&gt; </span><a href='084console.mu.html#L23'>console</a>:&amp;:<a href='084console.mu.html#L23'>console</a> [
<span id="L89" class="LineNr"> 89 </span> <span class="Constant">local-scope</span>
<span id="L90" class="LineNr"> 90 </span> <span class="Constant">load-ingredients</span>
<span id="L90" class="LineNr"> 90 </span> <span class="Constant">load-inputs</span>
<span id="L91" class="LineNr"> 91 </span> <span class="Delimiter">{</span>
<span id="L92" class="LineNr"> 92 </span> <span class="Conceal">¦</span> _, found?:bool <span class="Special">&lt;-</span> <a href='084console.mu.html#L35'>read-event</a> <a href='084console.mu.html#L23'>console</a>
<span id="L93" class="LineNr"> 93 </span> <span class="Conceal">¦</span> <span class="muControl">break-if</span> found?
@ -159,7 +159,7 @@ if ('onhashchange' in window) {
<span id="L98" class="LineNr"> 98 </span>
<span id="L99" class="LineNr"> 99 </span><span class="muRecipe">def</span> <a href='084console.mu.html#L99'>has-more-events?</a> <a href='084console.mu.html#L23'>console</a>:&amp;:<a href='084console.mu.html#L23'>console</a><span class="muRecipe"> -&gt; </span>result:bool [
<span id="L100" class="LineNr">100 </span> <span class="Constant">local-scope</span>
<span id="L101" class="LineNr">101 </span> <span class="Constant">load-ingredients</span>
<span id="L101" class="LineNr">101 </span> <span class="Constant">load-inputs</span>
<span id="L102" class="LineNr">102 </span> <span class="muControl">return-if</span> <a href='084console.mu.html#L23'>console</a>, <span class="Constant">0/false</span> <span class="Comment"># fake events are processed as soon as they arrive</span>
<span id="L103" class="LineNr">103 </span> result <span class="Special">&lt;-</span> interactions-left?
<span id="L104" class="LineNr">104 </span>]

View File

@ -144,7 +144,7 @@ if ('onhashchange' in window) {
<span id="L82" class="LineNr"> 82 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> curr_address+<span class="Constant">1</span><span class="Delimiter">,</span> Key[key]<span class="Delimiter">);</span>
<span id="L83" class="LineNr"> 83 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">else</span>
<span id="L84" class="LineNr"> 84 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;assume-console: can't press '&quot;</span> &lt;&lt; key &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
<span id="L85" class="LineNr"> 85 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> curr_address+<span class="Constant">1</span><span class="Delimiter">)</span> &lt; <span class="Constant">256</span><span class="Delimiter">)</span>
<span id="L85" class="LineNr"> 85 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> curr_address+<span class="Constant">1</span><span class="Delimiter">)</span> &lt; <span class="Constant">256</span><span class="Delimiter">)</span>
<span id="L86" class="LineNr"> 86 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Comment">// these keys are in ascii</span>
<span id="L87" class="LineNr"> 87 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> curr_address<span class="Delimiter">,</span> <span class="Comment">/*</span><span class="Comment">tag for 'text' variant of 'event' exclusive-container</span><span class="Comment">*/</span><span class="Constant">0</span><span class="Delimiter">);</span>
<span id="L88" class="LineNr"> 88 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">else</span> <span class="Delimiter">{</span>
@ -330,12 +330,12 @@ if ('onhashchange' in window) {
<span id="L268" class="LineNr">268 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;console not initialized</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L269" class="LineNr">269 </span> <span class="Conceal">¦</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L270" class="LineNr">270 </span> <span class="Delimiter">}</span>
<span id="L271" class="LineNr">271 </span> <span class="Normal">int</span> console_address = <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> CONSOLE<span class="Delimiter">);</span>
<span id="L272" class="LineNr">272 </span> <span class="Normal">int</span> console_data = <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> console_address+<span class="Constant">1</span><span class="Delimiter">);</span>
<span id="L273" class="LineNr">273 </span> <span class="Normal">int</span> length = <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> console_data<span class="Delimiter">);</span> <span class="Comment">// array length</span>
<span id="L271" class="LineNr">271 </span> <span class="Normal">int</span> console_address = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> CONSOLE<span class="Delimiter">);</span>
<span id="L272" class="LineNr">272 </span> <span class="Normal">int</span> console_data = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> console_address+<span class="Constant">1</span><span class="Delimiter">);</span>
<span id="L273" class="LineNr">273 </span> <span class="Normal">int</span> length = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> console_data<span class="Delimiter">);</span> <span class="Comment">// array length</span>
<span id="L274" class="LineNr">274 </span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">,</span> curr = console_data+<span class="Constant">1</span><span class="Delimiter">;</span> i &lt; length<span class="Delimiter">;</span> ++i<span class="Delimiter">,</span> curr+=size_of_event<span class="Delimiter">())</span> <span class="Delimiter">{</span>
<span id="L275" class="LineNr">275 </span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> curr<span class="Delimiter">)</span> != <span class="Comment">/*</span><span class="Comment">text</span><span class="Comment">*/</span><span class="Constant">0</span><span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
<span id="L276" class="LineNr">276 </span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> curr+<span class="Constant">1</span><span class="Delimiter">)</span> != ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
<span id="L275" class="LineNr">275 </span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> curr<span class="Delimiter">)</span> != <span class="Comment">/*</span><span class="Comment">text</span><span class="Comment">*/</span><span class="Constant">0</span><span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
<span id="L276" class="LineNr">276 </span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> curr+<span class="Constant">1</span><span class="Delimiter">)</span> != ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
<span id="L277" class="LineNr">277 </span> <span class="Conceal">¦</span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> n = <span class="Constant">0</span><span class="Delimiter">;</span> n &lt; <a href='085scenario_console.cc.html#L296'>size_of_event</a><span class="Delimiter">();</span> ++n<span class="Delimiter">)</span>
<span id="L278" class="LineNr">278 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> curr+n<span class="Delimiter">,</span> ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span>n<span class="Delimiter">));</span>
<span id="L279" class="LineNr">279 </span> <span class="Delimiter">}</span>

View File

@ -172,7 +172,7 @@ if ('onhashchange' in window) {
<span id="L111" class="LineNr">111 </span> <span class="Normal">long</span> <span class="Normal">long</span> <span class="Normal">int</span> x = <span class="Normal">static_cast</span>&lt;<span class="Normal">long</span> <span class="Normal">long</span> <span class="Normal">int</span>&gt;<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">));</span>
<span id="L112" class="LineNr">112 </span> <span class="Normal">FILE</span>* f = <span class="Normal">reinterpret_cast</span>&lt;<span class="Normal">FILE</span>*&gt;<span class="Delimiter">(</span>x<span class="Delimiter">);</span>
<span id="L113" class="LineNr">113 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>f == <span class="Constant">NULL</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L114" class="LineNr">114 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span><a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;can't read from null file in '&quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span><a href='026call.cc.html#L87'>current_instruction</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
<span id="L114" class="LineNr">114 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span><a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;can't read from null file in '&quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span><a href='026call.cc.html#L87'>current_instruction</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
<span id="L115" class="LineNr">115 </span> <span class="Conceal">¦</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L116" class="LineNr">116 </span> <span class="Delimiter">}</span>
<span id="L117" class="LineNr">117 </span> products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">2</span><span class="Delimiter">);</span>
@ -192,7 +192,7 @@ if ('onhashchange' in window) {
<span id="L131" class="LineNr">131 </span> <span class="Conceal">¦</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L132" class="LineNr">132 </span> <span class="Delimiter">}</span>
<span id="L133" class="LineNr">133 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>ferror<span class="Delimiter">(</span>f<span class="Delimiter">))</span> <span class="Delimiter">{</span>
<span id="L134" class="LineNr">134 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span><a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;couldn't read from file in '&quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span><a href='026call.cc.html#L87'>current_instruction</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
<span id="L134" class="LineNr">134 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span><a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;couldn't read from file in '&quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span><a href='026call.cc.html#L87'>current_instruction</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
<span id="L135" class="LineNr">135 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot; errno: &quot;</span> &lt;&lt; errno &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L136" class="LineNr">136 </span> <span class="Conceal">¦</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L137" class="LineNr">137 </span> <span class="Delimiter">}</span>
@ -232,7 +232,7 @@ if ('onhashchange' in window) {
<span id="L171" class="LineNr">171 </span> <span class="Normal">long</span> <span class="Normal">long</span> <span class="Normal">int</span> x = <span class="Normal">static_cast</span>&lt;<span class="Normal">long</span> <span class="Normal">long</span> <span class="Normal">int</span>&gt;<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">));</span>
<span id="L172" class="LineNr">172 </span> <span class="Normal">FILE</span>* f = <span class="Normal">reinterpret_cast</span>&lt;<span class="Normal">FILE</span>*&gt;<span class="Delimiter">(</span>x<span class="Delimiter">);</span>
<span id="L173" class="LineNr">173 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>f == <span class="Constant">NULL</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L174" class="LineNr">174 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span><a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;can't write to null file in '&quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span><a href='026call.cc.html#L87'>current_instruction</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
<span id="L174" class="LineNr">174 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span><a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;can't write to null file in '&quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span><a href='026call.cc.html#L87'>current_instruction</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
<span id="L175" class="LineNr">175 </span> <span class="Conceal">¦</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L176" class="LineNr">176 </span> <span class="Delimiter">}</span>
<span id="L177" class="LineNr">177 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>feof<span class="Delimiter">(</span>f<span class="Delimiter">))</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
@ -244,7 +244,7 @@ if ('onhashchange' in window) {
<span id="L183" class="LineNr">183 </span> <span class="Normal">char</span> c = <span class="Normal">static_cast</span>&lt;<span class="Normal">char</span>&gt;<span class="Delimiter">(</span>y<span class="Delimiter">);</span>
<span id="L184" class="LineNr">184 </span> putc<span class="Delimiter">(</span>c<span class="Delimiter">,</span> f<span class="Delimiter">);</span> <span class="Comment">// todo: unicode</span>
<span id="L185" class="LineNr">185 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>ferror<span class="Delimiter">(</span>f<span class="Delimiter">))</span> <span class="Delimiter">{</span>
<span id="L186" class="LineNr">186 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span><a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;couldn't write to file in '&quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span><a href='026call.cc.html#L87'>current_instruction</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
<span id="L186" class="LineNr">186 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span><a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;couldn't write to file in '&quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span><a href='026call.cc.html#L87'>current_instruction</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
<span id="L187" class="LineNr">187 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot; errno: &quot;</span> &lt;&lt; errno &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L188" class="LineNr">188 </span> <span class="Conceal">¦</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L189" class="LineNr">189 </span> <span class="Delimiter">}</span>

View File

@ -81,7 +81,7 @@ if ('onhashchange' in window) {
<span id="L20" class="LineNr"> 20 </span>
<span id="L21" class="LineNr"> 21 </span><span class="muRecipe">def</span> <a href='088file.mu.html#L21'>start-reading</a> <a href='088file.mu.html#L11'>resources</a>:&amp;:<a href='088file.mu.html#L11'>resources</a>, filename:text<span class="muRecipe"> -&gt; </span>contents:&amp;:<a href='075channel.mu.html#L43'>source</a>:char, error?:bool [
<span id="L22" class="LineNr"> 22 </span> <span class="Constant">local-scope</span>
<span id="L23" class="LineNr"> 23 </span> <span class="Constant">load-ingredients</span>
<span id="L23" class="LineNr"> 23 </span> <span class="Constant">load-inputs</span>
<span id="L24" class="LineNr"> 24 </span> error? <span class="Special">&lt;-</span> copy <span class="Constant">0/false</span>
<span id="L25" class="LineNr"> 25 </span> <span class="Delimiter">{</span>
<span id="L26" class="LineNr"> 26 </span> <span class="Conceal">¦</span> <span class="muControl">break-unless</span> <a href='088file.mu.html#L11'>resources</a>
@ -98,7 +98,7 @@ if ('onhashchange' in window) {
<span id="L37" class="LineNr"> 37 </span>
<span id="L38" class="LineNr"> 38 </span><span class="muRecipe">def</span> <a href='088file.mu.html#L38'>slurp</a> <a href='088file.mu.html#L11'>resources</a>:&amp;:<a href='088file.mu.html#L11'>resources</a>, filename:text<span class="muRecipe"> -&gt; </span>contents:text, error?:bool [
<span id="L39" class="LineNr"> 39 </span> <span class="Constant">local-scope</span>
<span id="L40" class="LineNr"> 40 </span> <span class="Constant">load-ingredients</span>
<span id="L40" class="LineNr"> 40 </span> <span class="Constant">load-inputs</span>
<span id="L41" class="LineNr"> 41 </span> <a href='075channel.mu.html#L43'>source</a>:&amp;:<a href='075channel.mu.html#L43'>source</a>:char, error?:bool <span class="Special">&lt;-</span> <a href='088file.mu.html#L21'>start-reading</a> <a href='088file.mu.html#L11'>resources</a>, filename
<span id="L42" class="LineNr"> 42 </span> <span class="muControl">return-if</span> error?, <span class="Constant">0/contents</span>
<span id="L43" class="LineNr"> 43 </span> buf:&amp;:<a href='061text.mu.html#L120'>buffer</a>:char <span class="Special">&lt;-</span> <a href='061text.mu.html#L125'>new-buffer</a> <span class="Constant">30/capacity</span>
@ -113,7 +113,7 @@ if ('onhashchange' in window) {
<span id="L52" class="LineNr"> 52 </span>
<span id="L53" class="LineNr"> 53 </span><span class="muRecipe">def</span> <a href='088file.mu.html#L53'>start-reading-from-fake-resource</a> <a href='088file.mu.html#L11'>resources</a>:&amp;:<a href='088file.mu.html#L11'>resources</a>, <a href='088file.mu.html#L16'>resource</a>:text<span class="muRecipe"> -&gt; </span>contents:&amp;:<a href='075channel.mu.html#L43'>source</a>:char, error?:bool [
<span id="L54" class="LineNr"> 54 </span> <span class="Constant">local-scope</span>
<span id="L55" class="LineNr"> 55 </span> <span class="Constant">load-ingredients</span>
<span id="L55" class="LineNr"> 55 </span> <span class="Constant">load-inputs</span>
<span id="L56" class="LineNr"> 56 </span> error? <span class="Special">&lt;-</span> copy <span class="Constant">0/no-error</span>
<span id="L57" class="LineNr"> 57 </span> i:num <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
<span id="L58" class="LineNr"> 58 </span> data:&amp;:@:<a href='088file.mu.html#L16'>resource</a> <span class="Special">&lt;-</span> get *resources, <span class="Constant">data:offset</span>
@ -136,7 +136,7 @@ if ('onhashchange' in window) {
<span id="L75" class="LineNr"> 75 </span>
<span id="L76" class="LineNr"> 76 </span><span class="muRecipe">def</span> <a href='088file.mu.html#L76'>receive-from-file</a> file:num, <a href='075channel.mu.html#L47'>sink</a>:&amp;:<a href='075channel.mu.html#L47'>sink</a>:char<span class="muRecipe"> -&gt; </span><a href='075channel.mu.html#L47'>sink</a>:&amp;:<a href='075channel.mu.html#L47'>sink</a>:char [
<span id="L77" class="LineNr"> 77 </span> <span class="Constant">local-scope</span>
<span id="L78" class="LineNr"> 78 </span> <span class="Constant">load-ingredients</span>
<span id="L78" class="LineNr"> 78 </span> <span class="Constant">load-inputs</span>
<span id="L79" class="LineNr"> 79 </span> <span class="Delimiter">{</span>
<span id="L80" class="LineNr"> 80 </span> <span class="Conceal">¦</span> c:char, eof?:bool <span class="Special">&lt;-</span> $read-from-file file
<span id="L81" class="LineNr"> 81 </span> <span class="Conceal">¦</span> <span class="muControl">break-if</span> eof?
@ -149,7 +149,7 @@ if ('onhashchange' in window) {
<span id="L88" class="LineNr"> 88 </span>
<span id="L89" class="LineNr"> 89 </span><span class="muRecipe">def</span> <a href='088file.mu.html#L89'>receive-from-text</a> contents:text, <a href='075channel.mu.html#L47'>sink</a>:&amp;:<a href='075channel.mu.html#L47'>sink</a>:char<span class="muRecipe"> -&gt; </span><a href='075channel.mu.html#L47'>sink</a>:&amp;:<a href='075channel.mu.html#L47'>sink</a>:char [
<span id="L90" class="LineNr"> 90 </span> <span class="Constant">local-scope</span>
<span id="L91" class="LineNr"> 91 </span> <span class="Constant">load-ingredients</span>
<span id="L91" class="LineNr"> 91 </span> <span class="Constant">load-inputs</span>
<span id="L92" class="LineNr"> 92 </span> i:num <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
<span id="L93" class="LineNr"> 93 </span> len:num <span class="Special">&lt;-</span> length *contents
<span id="L94" class="LineNr"> 94 </span> <span class="Delimiter">{</span>
@ -165,7 +165,7 @@ if ('onhashchange' in window) {
<span id="L104" class="LineNr">104 </span>
<span id="L105" class="LineNr">105 </span><span class="muRecipe">def</span> <a href='088file.mu.html#L105'>start-writing</a> <a href='088file.mu.html#L11'>resources</a>:&amp;:<a href='088file.mu.html#L11'>resources</a>, filename:text<span class="muRecipe"> -&gt; </span><a href='075channel.mu.html#L47'>sink</a>:&amp;:<a href='075channel.mu.html#L47'>sink</a>:char, routine-id:num, error?:bool [
<span id="L106" class="LineNr">106 </span> <span class="Constant">local-scope</span>
<span id="L107" class="LineNr">107 </span> <span class="Constant">load-ingredients</span>
<span id="L107" class="LineNr">107 </span> <span class="Constant">load-inputs</span>
<span id="L108" class="LineNr">108 </span> error? <span class="Special">&lt;-</span> copy <span class="Constant">0/false</span>
<span id="L109" class="LineNr">109 </span> <a href='075channel.mu.html#L43'>source</a>:&amp;:<a href='075channel.mu.html#L43'>source</a>:char, <a href='075channel.mu.html#L47'>sink</a>:&amp;:<a href='075channel.mu.html#L47'>sink</a>:char <span class="Special">&lt;-</span> <a href='075channel.mu.html#L51'>new-channel</a><span class="Constant"> 30</span>
<span id="L110" class="LineNr">110 </span> <span class="Delimiter">{</span>
@ -187,7 +187,7 @@ if ('onhashchange' in window) {
<span id="L126" class="LineNr">126 </span>
<span id="L127" class="LineNr">127 </span><span class="muRecipe">def</span> <a href='088file.mu.html#L127'>dump</a> <a href='088file.mu.html#L11'>resources</a>:&amp;:<a href='088file.mu.html#L11'>resources</a>, filename:text, contents:text<span class="muRecipe"> -&gt; </span><a href='088file.mu.html#L11'>resources</a>:&amp;:<a href='088file.mu.html#L11'>resources</a>, error?:bool [
<span id="L128" class="LineNr">128 </span> <span class="Constant">local-scope</span>
<span id="L129" class="LineNr">129 </span> <span class="Constant">load-ingredients</span>
<span id="L129" class="LineNr">129 </span> <span class="Constant">load-inputs</span>
<span id="L130" class="LineNr">130 </span> <span class="Comment"># todo: really create an empty file</span>
<span id="L131" class="LineNr">131 </span> <span class="muControl">return-unless</span> contents, <a href='088file.mu.html#L11'>resources</a>, <span class="Constant">0/no-error</span>
<span id="L132" class="LineNr">132 </span> sink-file:&amp;:<a href='075channel.mu.html#L47'>sink</a>:char, write-routine:num, error?:bool <span class="Special">&lt;-</span> <a href='088file.mu.html#L105'>start-writing</a> <a href='088file.mu.html#L11'>resources</a>, filename
@ -210,7 +210,7 @@ if ('onhashchange' in window) {
<span id="L149" class="LineNr">149 </span>
<span id="L150" class="LineNr">150 </span><span class="muRecipe">def</span> <a href='088file.mu.html#L150'>transmit-to-file</a> file:num, <a href='075channel.mu.html#L43'>source</a>:&amp;:<a href='075channel.mu.html#L43'>source</a>:char<span class="muRecipe"> -&gt; </span><a href='075channel.mu.html#L43'>source</a>:&amp;:<a href='075channel.mu.html#L43'>source</a>:char [
<span id="L151" class="LineNr">151 </span> <span class="Constant">local-scope</span>
<span id="L152" class="LineNr">152 </span> <span class="Constant">load-ingredients</span>
<span id="L152" class="LineNr">152 </span> <span class="Constant">load-inputs</span>
<span id="L153" class="LineNr">153 </span> <span class="Delimiter">{</span>
<span id="L154" class="LineNr">154 </span> <span class="Conceal">¦</span> c:char, done?:bool, <a href='075channel.mu.html#L43'>source</a> <span class="Special">&lt;-</span> read <a href='075channel.mu.html#L43'>source</a>
<span id="L155" class="LineNr">155 </span> <span class="Conceal">¦</span> <span class="muControl">break-if</span> done?
@ -222,7 +222,7 @@ if ('onhashchange' in window) {
<span id="L161" class="LineNr">161 </span>
<span id="L162" class="LineNr">162 </span><span class="muRecipe">def</span> <a href='088file.mu.html#L162'>transmit-to-fake-resource</a> <a href='088file.mu.html#L11'>resources</a>:&amp;:<a href='088file.mu.html#L11'>resources</a>, filename:text, <a href='075channel.mu.html#L43'>source</a>:&amp;:<a href='075channel.mu.html#L43'>source</a>:char<span class="muRecipe"> -&gt; </span><a href='088file.mu.html#L11'>resources</a>:&amp;:<a href='088file.mu.html#L11'>resources</a>, <a href='075channel.mu.html#L43'>source</a>:&amp;:<a href='075channel.mu.html#L43'>source</a>:char [
<span id="L163" class="LineNr">163 </span> <span class="Constant">local-scope</span>
<span id="L164" class="LineNr">164 </span> <span class="Constant">load-ingredients</span>
<span id="L164" class="LineNr">164 </span> <span class="Constant">load-inputs</span>
<span id="L165" class="LineNr">165 </span> lock:location <span class="Special">&lt;-</span> get-location *resources, <span class="Constant">lock:offset</span>
<span id="L166" class="LineNr">166 </span> wait-for-reset-then-set lock
<span id="L167" class="LineNr">167 </span> <span class="Comment"># compute new file contents</span>

View File

@ -87,7 +87,7 @@ if ('onhashchange' in window) {
<span id="L25" class="LineNr"> 25 </span><span class="Comment"># helper just for this scenario</span>
<span id="L26" class="LineNr"> 26 </span><span class="muRecipe">def</span> <a href='092socket.mu.html#L26'>example-handler</a> query:text<span class="muRecipe"> -&gt; </span>response:text [
<span id="L27" class="LineNr"> 27 </span> <span class="Constant">local-scope</span>
<span id="L28" class="LineNr"> 28 </span> <span class="Constant">load-ingredients</span>
<span id="L28" class="LineNr"> 28 </span> <span class="Constant">load-inputs</span>
<span id="L29" class="LineNr"> 29 </span> <span class="muControl">return</span> <span class="Constant">[abc]</span>
<span id="L30" class="LineNr"> 30 </span>]
<span id="L31" class="LineNr"> 31 </span>
@ -116,7 +116,7 @@ if ('onhashchange' in window) {
<span id="L54" class="LineNr"> 54 </span>
<span id="L55" class="LineNr"> 55 </span><span class="muRecipe">def</span> <a href='092socket.mu.html#L55'>serve-one-request</a> socket:num, <a href='092socket.mu.html#L53'>request-handler</a>:<a href='092socket.mu.html#L53'>request-handler</a><span class="muRecipe"> -&gt; </span>socket:num [
<span id="L56" class="LineNr"> 56 </span> <span class="Constant">local-scope</span>
<span id="L57" class="LineNr"> 57 </span> <span class="Constant">load-ingredients</span>
<span id="L57" class="LineNr"> 57 </span> <span class="Constant">load-inputs</span>
<span id="L58" class="LineNr"> 58 </span> session:num <span class="Special">&lt;-</span> $accept socket
<span id="L59" class="LineNr"> 59 </span> assert session, <span class="Constant">[ </span>
<span id="L60" class="LineNr"> 60 </span><span class="Constant">F - example-server-test: $accept failed]</span>
@ -130,9 +130,9 @@ if ('onhashchange' in window) {
<span id="L68" class="LineNr"> 68 </span>
<span id="L69" class="LineNr"> 69 </span><span class="muRecipe">def</span> <a href='092socket.mu.html#L69'>start-reading-from-network</a> <a href='088file.mu.html#L11'>resources</a>:&amp;:<a href='088file.mu.html#L11'>resources</a>, uri:text<span class="muRecipe"> -&gt; </span>contents:&amp;:<a href='075channel.mu.html#L43'>source</a>:char [
<span id="L70" class="LineNr"> 70 </span> <span class="Constant">local-scope</span>
<span id="L71" class="LineNr"> 71 </span> <span class="Constant">load-ingredients</span>
<span id="L71" class="LineNr"> 71 </span> <span class="Constant">load-inputs</span>
<span id="L72" class="LineNr"> 72 </span> <span class="Delimiter">{</span>
<span id="L73" class="LineNr"> 73 </span> <span class="Conceal">¦</span> port:num, port-found?:boolean <span class="Special">&lt;-</span> <span class="Constant">next-ingredient</span>
<span id="L73" class="LineNr"> 73 </span> <span class="Conceal">¦</span> port:num, port-found?:boolean <span class="Special">&lt;-</span> <span class="Constant">next-input</span>
<span id="L74" class="LineNr"> 74 </span> <span class="Conceal">¦</span> <span class="muControl">break-if</span> port-found?
<span id="L75" class="LineNr"> 75 </span> <span class="Conceal">¦</span> port <span class="Special">&lt;-</span> copy <span class="Constant">80/http-port</span>
<span id="L76" class="LineNr"> 76 </span> <span class="Delimiter">}</span>
@ -154,7 +154,7 @@ if ('onhashchange' in window) {
<span id="L92" class="LineNr"> 92 </span>
<span id="L93" class="LineNr"> 93 </span><span class="muRecipe">def</span> <a href='092socket.mu.html#L93'>request-socket</a> socket:num, s:text<span class="muRecipe"> -&gt; </span>socket:num [
<span id="L94" class="LineNr"> 94 </span> <span class="Constant">local-scope</span>
<span id="L95" class="LineNr"> 95 </span> <span class="Constant">load-ingredients</span>
<span id="L95" class="LineNr"> 95 </span> <span class="Constant">load-inputs</span>
<span id="L96" class="LineNr"> 96 </span> <a href='092socket.mu.html#L132'>write-to-socket</a> socket, s
<span id="L97" class="LineNr"> 97 </span> $write-to-socket socket, <span class="Constant">13/cr</span>
<span id="L98" class="LineNr"> 98 </span> $write-to-socket socket, <span class="Constant">10/lf</span>
@ -165,7 +165,7 @@ if ('onhashchange' in window) {
<span id="L103" class="LineNr">103 </span>
<span id="L104" class="LineNr">104 </span><span class="muRecipe">def</span> <a href='092socket.mu.html#L104'>receive-from-socket</a> socket:num, <a href='075channel.mu.html#L47'>sink</a>:&amp;:<a href='075channel.mu.html#L47'>sink</a>:char<span class="muRecipe"> -&gt; </span><a href='075channel.mu.html#L47'>sink</a>:&amp;:<a href='075channel.mu.html#L47'>sink</a>:char, socket:num [
<span id="L105" class="LineNr">105 </span> <span class="Constant">local-scope</span>
<span id="L106" class="LineNr">106 </span> <span class="Constant">load-ingredients</span>
<span id="L106" class="LineNr">106 </span> <span class="Constant">load-inputs</span>
<span id="L107" class="LineNr">107 </span> <span class="Delimiter">{</span>
<span id="L108" class="LineNr">108 </span><span class="Constant"> </span><span class="Conceal">¦</span><span class="Constant"> +next-attempt</span>
<span id="L109" class="LineNr">109 </span> <span class="Conceal">¦</span> c:char, found?:bool, eof?:bool, error:num <span class="Special">&lt;-</span> $read-from-socket socket
@ -186,14 +186,14 @@ if ('onhashchange' in window) {
<span id="L124" class="LineNr">124 </span>
<span id="L125" class="LineNr">125 </span><span class="muRecipe">def</span> <a href='092socket.mu.html#L125'>receive-from-client-socket-and-close</a> socket:num, <a href='075channel.mu.html#L47'>sink</a>:&amp;:<a href='075channel.mu.html#L47'>sink</a>:char<span class="muRecipe"> -&gt; </span><a href='075channel.mu.html#L47'>sink</a>:&amp;:<a href='075channel.mu.html#L47'>sink</a>:char, socket:num [
<span id="L126" class="LineNr">126 </span> <span class="Constant">local-scope</span>
<span id="L127" class="LineNr">127 </span> <span class="Constant">load-ingredients</span>
<span id="L127" class="LineNr">127 </span> <span class="Constant">load-inputs</span>
<span id="L128" class="LineNr">128 </span> <a href='075channel.mu.html#L47'>sink</a> <span class="Special">&lt;-</span> <a href='092socket.mu.html#L104'>receive-from-socket</a> socket, <a href='075channel.mu.html#L47'>sink</a>
<span id="L129" class="LineNr">129 </span> socket <span class="Special">&lt;-</span> $close-socket socket
<span id="L130" class="LineNr">130 </span>]
<span id="L131" class="LineNr">131 </span>
<span id="L132" class="LineNr">132 </span><span class="muRecipe">def</span> <a href='092socket.mu.html#L132'>write-to-socket</a> socket:num, s:text [
<span id="L133" class="LineNr">133 </span> <span class="Constant">local-scope</span>
<span id="L134" class="LineNr">134 </span> <span class="Constant">load-ingredients</span>
<span id="L134" class="LineNr">134 </span> <span class="Constant">load-inputs</span>
<span id="L135" class="LineNr">135 </span> len:num <span class="Special">&lt;-</span> length *s
<span id="L136" class="LineNr">136 </span> i:num <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
<span id="L137" class="LineNr">137 </span> <span class="Delimiter">{</span>
@ -209,7 +209,7 @@ if ('onhashchange' in window) {
<span id="L147" class="LineNr">147 </span><span class="Comment"># like split-first, but don't eat the delimiter</span>
<span id="L148" class="LineNr">148 </span><span class="muRecipe">def</span> <a href='092socket.mu.html#L148'>split-at</a> text:text, delim:char<span class="muRecipe"> -&gt; </span>x:text, y:text [
<span id="L149" class="LineNr">149 </span> <span class="Constant">local-scope</span>
<span id="L150" class="LineNr">150 </span> <span class="Constant">load-ingredients</span>
<span id="L150" class="LineNr">150 </span> <span class="Constant">load-inputs</span>
<span id="L151" class="LineNr">151 </span> <span class="Comment"># empty text? return empty texts</span>
<span id="L152" class="LineNr">152 </span> len:num <span class="Special">&lt;-</span> length *text
<span id="L153" class="LineNr">153 </span> <span class="Delimiter">{</span>

View File

@ -101,7 +101,7 @@ if ('onhashchange' in window) {
<span id="L38" class="LineNr">38 </span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;--- check if <a href='010vm.cc.html#L19'>recipe</a> &quot;</span> &lt;&lt; caller<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot; has any dependency-injection mistakes&quot;</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L39" class="LineNr">39 </span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> index = <span class="Constant">0</span><span class="Delimiter">;</span> index &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>steps<span class="Delimiter">);</span> ++index<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L40" class="LineNr">40 </span> <span class="Conceal">¦</span> <span class="Normal">const</span> instruction&amp; inst = caller<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>index<span class="Delimiter">);</span>
<span id="L41" class="LineNr">41 </span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='028call_return.cc.html#L114'>is_primitive</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>operation<span class="Delimiter">))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
<span id="L41" class="LineNr">41 </span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='028call_return.cc.html#L115'>is_primitive</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>operation<span class="Delimiter">))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
<span id="L42" class="LineNr">42 </span> <span class="Conceal">¦</span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span> i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span> ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L43" class="LineNr">43 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">const</span> reagent&amp; ing = inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
<span id="L44" class="LineNr">44 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!is_literal<span class="Delimiter">(</span>ing<span class="Delimiter">)</span> || ing<span class="Delimiter">.</span>name != <span class="Constant">&quot;0&quot;</span><span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
@ -111,7 +111,7 @@ if ('onhashchange' in window) {
<span id="L48" class="LineNr">48 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">const</span> reagent&amp; expected_ing = callee<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
<span id="L49" class="LineNr">49 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> j = <span class="Constant">0</span><span class="Delimiter">;</span> j &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>Real_hardware_types<span class="Delimiter">);</span> ++j<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L50" class="LineNr">50 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>*Real_hardware_types<span class="Delimiter">.</span>at<span class="Delimiter">(</span>j<span class="Delimiter">)</span> == *expected_ing<span class="Delimiter">.</span>type<span class="Delimiter">)</span>
<span id="L51" class="LineNr">51 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;': only 'main' can pass 0 into a &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>expected_ing<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L51" class="LineNr">51 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;': only 'main' can pass 0 into a &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>expected_ing<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L52" class="LineNr">52 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>
<span id="L53" class="LineNr">53 </span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>
<span id="L54" class="LineNr">54 </span> <span class="Delimiter">}</span>

View File

@ -558,7 +558,7 @@ if ('onhashchange' in window) {
<span id="L498" class="LineNr">498 </span> <span class="Conceal">¦</span> exit<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
<span id="L499" class="LineNr">499 </span> <span class="Delimiter">}</span>
<span id="L500" class="LineNr">500 </span> Trace_stream = <span class="Normal">new</span> trace_stream<span class="Delimiter">;</span>
<span id="L501" class="LineNr">501 </span> <span class="Normal">while</span> <span class="Delimiter">(</span><a href='001help.cc.html#L238'>has_data</a><span class="Delimiter">(</span>tin<span class="Delimiter">))</span> <span class="Delimiter">{</span>
<span id="L501" class="LineNr">501 </span> <span class="Normal">while</span> <span class="Delimiter">(</span><a href='001help.cc.html#L239'>has_data</a><span class="Delimiter">(</span>tin<span class="Delimiter">))</span> <span class="Delimiter">{</span>
<span id="L502" class="LineNr">502 </span> <span class="Conceal">¦</span> tin &gt;&gt; std::noskipws<span class="Delimiter">;</span>
<span id="L503" class="LineNr">503 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> skip_whitespace_but_not_newline<span class="Delimiter">(</span>tin<span class="Delimiter">);</span>
<span id="L504" class="LineNr">504 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!isdigit<span class="Delimiter">(</span>tin<span class="Delimiter">.</span>peek<span class="Delimiter">()))</span> <span class="Delimiter">{</span>

View File

@ -521,7 +521,7 @@ if ('onhashchange' in window) {
<span id="L457" class="LineNr">457 </span> <span class="Conceal">¦</span> <span class="Comment">// x:text &lt;- new [abc]</span>
<span id="L458" class="LineNr">458 </span> <span class="Conceal">¦</span> <span class="Comment">// =&gt; abc</span>
<span id="L459" class="LineNr">459 </span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span><a href='010vm.cc.html#L32'>instruction</a><span class="Delimiter">.</span>products<span class="Delimiter">))</span> <span class="Delimiter">{</span>
<span id="L460" class="LineNr">460 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='027call_ingredient.cc.html#L174'>is_mu_text</a><span class="Delimiter">(</span><a href='010vm.cc.html#L32'>instruction</a><span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
<span id="L460" class="LineNr">460 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='027call_ingredient.cc.html#L177'>is_mu_text</a><span class="Delimiter">(</span><a href='010vm.cc.html#L32'>instruction</a><span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
<span id="L461" class="LineNr">461 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!scalar<span class="Delimiter">(</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span> <span class="Comment">// error handled elsewhere</span>
<span id="L462" class="LineNr">462 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> out &lt;&lt; <a href='038new_text.cc.html#L143'>read_mu_text</a><span class="Delimiter">(</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
<span id="L463" class="LineNr">463 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
@ -552,7 +552,7 @@ if ('onhashchange' in window) {
<span id="L488" class="LineNr">488 </span><span class="Normal">int</span> <a href='101run_sandboxed.cc.html#L488'>stringified_value_of_location</a><span class="Delimiter">(</span><span class="Normal">int</span> <a href='043space.cc.html#L82'>address</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L489" class="LineNr">489 </span> <span class="Comment">// convert to string</span>
<span id="L490" class="LineNr">490 </span> ostringstream out<span class="Delimiter">;</span>
<span id="L491" class="LineNr">491 </span> out &lt;&lt; no_scientific<span class="Delimiter">(</span><a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> <a href='043space.cc.html#L82'>address</a><span class="Delimiter">));</span>
<span id="L491" class="LineNr">491 </span> out &lt;&lt; no_scientific<span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> <a href='043space.cc.html#L82'>address</a><span class="Delimiter">));</span>
<span id="L492" class="LineNr">492 </span> <span class="Identifier">return</span> <a href='038new_text.cc.html#L38'>new_mu_text</a><span class="Delimiter">(</span>out<span class="Delimiter">.</span>str<span class="Delimiter">());</span>
<span id="L493" class="LineNr">493 </span><span class="Delimiter">}</span>
<span id="L494" class="LineNr">494 </span>

View File

@ -63,7 +63,7 @@ if ('onhashchange' in window) {
<span id="L3" class="LineNr"> 3 </span><span class="muRecipe">def</span> <a href='channel.mu.html#L3'>producer</a> <a href='075channel.mu.html#L47'>sink</a>:&amp;:<a href='075channel.mu.html#L47'>sink</a>:char<span class="muRecipe"> -&gt; </span><a href='075channel.mu.html#L47'>sink</a>:&amp;:<a href='075channel.mu.html#L47'>sink</a>:char [
<span id="L4" class="LineNr"> 4 </span> <span class="Comment"># produce characters 1 to 5 on a channel</span>
<span id="L5" class="LineNr"> 5 </span> <span class="Constant">local-scope</span>
<span id="L6" class="LineNr"> 6 </span> <span class="Constant">load-ingredients</span>
<span id="L6" class="LineNr"> 6 </span> <span class="Constant">load-inputs</span>
<span id="L7" class="LineNr"> 7 </span> <span class="Comment"># n = 0</span>
<span id="L8" class="LineNr"> 8 </span> n:char <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
<span id="L9" class="LineNr"> 9 </span> <span class="Delimiter">{</span>
@ -82,7 +82,7 @@ if ('onhashchange' in window) {
<span id="L22" class="LineNr">22 </span><span class="muRecipe">def</span> <a href='channel.mu.html#L22'>consumer</a> <a href='075channel.mu.html#L43'>source</a>:&amp;:<a href='075channel.mu.html#L43'>source</a>:char<span class="muRecipe"> -&gt; </span><a href='075channel.mu.html#L43'>source</a>:&amp;:<a href='075channel.mu.html#L43'>source</a>:char [
<span id="L23" class="LineNr">23 </span> <span class="Comment"># consume and print integers from a channel</span>
<span id="L24" class="LineNr">24 </span> <span class="Constant">local-scope</span>
<span id="L25" class="LineNr">25 </span> <span class="Constant">load-ingredients</span>
<span id="L25" class="LineNr">25 </span> <span class="Constant">load-inputs</span>
<span id="L26" class="LineNr">26 </span> <span class="Delimiter">{</span>
<span id="L27" class="LineNr">27 </span> <span class="Conceal">¦</span> <span class="Comment"># read an integer from the channel</span>
<span id="L28" class="LineNr">28 </span> <span class="Conceal">¦</span> n:char, eof?:bool, <a href='075channel.mu.html#L43'>source</a> <span class="Special">&lt;-</span> read <a href='075channel.mu.html#L43'>source</a>

View File

@ -70,7 +70,7 @@ if ('onhashchange' in window) {
<span id="L6" class="LineNr"> 6 </span> open-console <span class="Comment"># take control of screen, keyboard and mouse</span>
<span id="L7" class="LineNr"> 7 </span> <a href='081print.mu.html#L46'>clear-screen</a> <span class="Constant">0/screen</span> <span class="Comment"># non-scrolling app</span>
<span id="L8" class="LineNr"> 8 </span>
<span id="L9" class="LineNr"> 9 </span> <span class="Comment"># The chessboard function takes keyboard and screen objects as 'ingredients'.</span>
<span id="L9" class="LineNr"> 9 </span> <span class="Comment"># The chessboard function takes keyboard and screen objects as inputs.</span>
<span id="L10" class="LineNr"> 10 </span> <span class="Comment">#</span>
<span id="L11" class="LineNr"> 11 </span> <span class="Comment"># In Mu it is good form (though not required) to explicitly state what</span>
<span id="L12" class="LineNr"> 12 </span> <span class="Comment"># hardware a function needs.</span>
@ -132,7 +132,7 @@ if ('onhashchange' in window) {
<span id="L68" class="LineNr"> 68 </span>
<span id="L69" class="LineNr"> 69 </span><span class="muRecipe">def</span> <a href='chessboard.mu.html#L69'>chessboard</a> <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a>, <a href='084console.mu.html#L23'>console</a>:&amp;:<a href='084console.mu.html#L23'>console</a><span class="muRecipe"> -&gt; </span><a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a>, <a href='084console.mu.html#L23'>console</a>:&amp;:<a href='084console.mu.html#L23'>console</a> [
<span id="L70" class="LineNr"> 70 </span> <span class="Constant">local-scope</span>
<span id="L71" class="LineNr"> 71 </span> <span class="Constant">load-ingredients</span>
<span id="L71" class="LineNr"> 71 </span> <span class="Constant">load-inputs</span>
<span id="L72" class="LineNr"> 72 </span> <a href='chessboard.mu.html#L67'>board</a>:<a href='chessboard.mu.html#L67'>board</a> <span class="Special">&lt;-</span> <a href='chessboard.mu.html#L180'>initial-position</a>
<span id="L73" class="LineNr"> 73 </span> <span class="Comment"># hook up stdin</span>
<span id="L74" class="LineNr"> 74 </span> stdin-in:&amp;:<a href='075channel.mu.html#L43'>source</a>:char, stdin-out:&amp;:<a href='075channel.mu.html#L47'>sink</a>:char <span class="Special">&lt;-</span> <a href='075channel.mu.html#L51'>new-channel</a> <span class="Constant">10/capacity</span>
@ -170,7 +170,7 @@ if ('onhashchange' in window) {
<span id="L106" class="LineNr">106 </span>
<span id="L107" class="LineNr">107 </span><span class="muRecipe">def</span> <a href='chessboard.mu.html#L107'>new-board</a> <a href='chessboard.mu.html#L180'>initial-position</a>:&amp;:@:char<span class="muRecipe"> -&gt; </span><a href='chessboard.mu.html#L67'>board</a>:<a href='chessboard.mu.html#L67'>board</a> [
<span id="L108" class="LineNr">108 </span> <span class="Constant">local-scope</span>
<span id="L109" class="LineNr">109 </span> <span class="Constant">load-ingredients</span>
<span id="L109" class="LineNr">109 </span> <span class="Constant">load-inputs</span>
<span id="L110" class="LineNr">110 </span> <span class="Comment"># assert(length(initial-position) == 64)</span>
<span id="L111" class="LineNr">111 </span> len:num <span class="Special">&lt;-</span> length *initial-position
<span id="L112" class="LineNr">112 </span> correct-length?:bool <span class="Special">&lt;-</span> equal len,<span class="Constant"> 64</span>
@ -190,7 +190,7 @@ if ('onhashchange' in window) {
<span id="L126" class="LineNr">126 </span>
<span id="L127" class="LineNr">127 </span><span class="muRecipe">def</span> <a href='chessboard.mu.html#L127'>new-file</a> position:&amp;:@:char, index:num<span class="muRecipe"> -&gt; </span>result:&amp;:@:char [
<span id="L128" class="LineNr">128 </span> <span class="Constant">local-scope</span>
<span id="L129" class="LineNr">129 </span> <span class="Constant">load-ingredients</span>
<span id="L129" class="LineNr">129 </span> <span class="Constant">load-inputs</span>
<span id="L130" class="LineNr">130 </span> index <span class="Special">&lt;-</span> multiply index,<span class="Constant"> 8</span>
<span id="L131" class="LineNr">131 </span> result <span class="Special">&lt;-</span> new <span class="Constant">character:type</span>,<span class="Constant"> 8</span>
<span id="L132" class="LineNr">132 </span> row:num <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
@ -207,7 +207,7 @@ if ('onhashchange' in window) {
<span id="L143" class="LineNr">143 </span>
<span id="L144" class="LineNr">144 </span><span class="muRecipe">def</span> <a href='chessboard.mu.html#L144'>print-board</a> <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a>, <a href='chessboard.mu.html#L67'>board</a>:<a href='chessboard.mu.html#L67'>board</a><span class="muRecipe"> -&gt; </span><a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a> [
<span id="L145" class="LineNr">145 </span> <span class="Constant">local-scope</span>
<span id="L146" class="LineNr">146 </span> <span class="Constant">load-ingredients</span>
<span id="L146" class="LineNr">146 </span> <span class="Constant">load-inputs</span>
<span id="L147" class="LineNr">147 </span> row:num <span class="Special">&lt;-</span> copy<span class="Constant"> 7</span> <span class="Comment"># start printing from the top of the board</span>
<span id="L148" class="LineNr">148 </span> space:char <span class="Special">&lt;-</span> copy <span class="Constant">32/space</span>
<span id="L149" class="LineNr">149 </span> <span class="Comment"># print each row</span>
@ -301,7 +301,7 @@ if ('onhashchange' in window) {
<span id="L237" class="LineNr">237 </span><span class="Comment"># prints only error messages to screen</span>
<span id="L238" class="LineNr">238 </span><span class="muRecipe">def</span> <a href='chessboard.mu.html#L238'>read-move</a> stdin:&amp;:<a href='075channel.mu.html#L43'>source</a>:char, <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a><span class="muRecipe"> -&gt; </span>result:&amp;:<a href='chessboard.mu.html#L229'>move</a>, quit?:bool, error?:bool, stdin:&amp;:<a href='075channel.mu.html#L43'>source</a>:char, <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a> [
<span id="L239" class="LineNr">239 </span> <span class="Constant">local-scope</span>
<span id="L240" class="LineNr">240 </span> <span class="Constant">load-ingredients</span>
<span id="L240" class="LineNr">240 </span> <span class="Constant">load-inputs</span>
<span id="L241" class="LineNr">241 </span> from-file:num, quit?:bool, error?:bool <span class="Special">&lt;-</span> <a href='chessboard.mu.html#L266'>read-file</a> stdin, <a href='081print.mu.html#L16'>screen</a>
<span id="L242" class="LineNr">242 </span> <span class="muControl">return-if</span> quit?, <span class="Constant">0/dummy</span>
<span id="L243" class="LineNr">243 </span> <span class="muControl">return-if</span> error?, <span class="Constant">0/dummy</span>
@ -329,7 +329,7 @@ if ('onhashchange' in window) {
<span id="L265" class="LineNr">265 </span><span class="Comment"># valid values for file: 0-7</span>
<span id="L266" class="LineNr">266 </span><span class="muRecipe">def</span> <a href='chessboard.mu.html#L266'>read-file</a> stdin:&amp;:<a href='075channel.mu.html#L43'>source</a>:char, <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a><span class="muRecipe"> -&gt; </span>file:num, quit:bool, error:bool, stdin:&amp;:<a href='075channel.mu.html#L43'>source</a>:char, <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a> [
<span id="L267" class="LineNr">267 </span> <span class="Constant">local-scope</span>
<span id="L268" class="LineNr">268 </span> <span class="Constant">load-ingredients</span>
<span id="L268" class="LineNr">268 </span> <span class="Constant">load-inputs</span>
<span id="L269" class="LineNr">269 </span> c:char, eof?:bool, stdin <span class="Special">&lt;-</span> read stdin
<span id="L270" class="LineNr">270 </span> <span class="muControl">return-if</span> eof?, <span class="Constant">0/dummy</span>, <span class="Constant">1/quit</span>, <span class="Constant">0/error</span>
<span id="L271" class="LineNr">271 </span> q-pressed?:bool <span class="Special">&lt;-</span> equal c, <span class="Constant">81/Q</span>
@ -367,7 +367,7 @@ if ('onhashchange' in window) {
<span id="L303" class="LineNr">303 </span><span class="Comment"># valid values for rank: 0-7</span>
<span id="L304" class="LineNr">304 </span><span class="muRecipe">def</span> <a href='chessboard.mu.html#L304'>read-rank</a> stdin:&amp;:<a href='075channel.mu.html#L43'>source</a>:char, <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a><span class="muRecipe"> -&gt; </span>rank:num, quit?:bool, error?:bool, stdin:&amp;:<a href='075channel.mu.html#L43'>source</a>:char, <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a> [
<span id="L305" class="LineNr">305 </span> <span class="Constant">local-scope</span>
<span id="L306" class="LineNr">306 </span> <span class="Constant">load-ingredients</span>
<span id="L306" class="LineNr">306 </span> <span class="Constant">load-inputs</span>
<span id="L307" class="LineNr">307 </span> c:char, eof?:bool, stdin <span class="Special">&lt;-</span> read stdin
<span id="L308" class="LineNr">308 </span> <span class="muControl">return-if</span> eof?, <span class="Constant">0/dummy</span>, <span class="Constant">1/quit</span>, <span class="Constant">0/error</span>
<span id="L309" class="LineNr">309 </span> q-pressed?:bool <span class="Special">&lt;-</span> equal c, <span class="Constant">81/Q</span>
@ -405,7 +405,7 @@ if ('onhashchange' in window) {
<span id="L341" class="LineNr">341 </span><span class="Comment"># return true on error</span>
<span id="L342" class="LineNr">342 </span><span class="muRecipe">def</span> <a href='chessboard.mu.html#L342'>expect-from-channel</a> stdin:&amp;:<a href='075channel.mu.html#L43'>source</a>:char, expected:char, <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a><span class="muRecipe"> -&gt; </span>result:bool, stdin:&amp;:<a href='075channel.mu.html#L43'>source</a>:char, <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a> [
<span id="L343" class="LineNr">343 </span> <span class="Constant">local-scope</span>
<span id="L344" class="LineNr">344 </span> <span class="Constant">load-ingredients</span>
<span id="L344" class="LineNr">344 </span> <span class="Constant">load-inputs</span>
<span id="L345" class="LineNr">345 </span> c:char, eof?:bool, stdin <span class="Special">&lt;-</span> read stdin
<span id="L346" class="LineNr">346 </span> <span class="muControl">return-if</span> eof? <span class="Constant">1/true</span>
<span id="L347" class="LineNr">347 </span> <span class="Delimiter">{</span>
@ -422,7 +422,7 @@ if ('onhashchange' in window) {
<span id="L358" class="LineNr">358 </span> <a href='075channel.mu.html#L43'>source</a>:&amp;:<a href='075channel.mu.html#L43'>source</a>:char, <a href='075channel.mu.html#L47'>sink</a>:&amp;:<a href='075channel.mu.html#L47'>sink</a>:char <span class="Special">&lt;-</span> <a href='075channel.mu.html#L51'>new-channel</a> <span class="Constant">2/capacity</span>
<span id="L359" class="LineNr">359 </span> read-move-routine:num/routine <span class="Special">&lt;-</span> start-running <a href='chessboard.mu.html#L238'>read-move</a>, <a href='075channel.mu.html#L43'>source</a>, <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a>
<span id="L360" class="LineNr">360 </span> run [
<span id="L361" class="LineNr">361 </span> <span class="Conceal">¦</span> <span class="Comment"># 'read-move' is waiting for input</span>
<span id="L361" class="LineNr">361 </span> <span class="Conceal">¦</span> <span class="Comment"># 'read-move' is waiting for keypress</span>
<span id="L362" class="LineNr">362 </span> <span class="Conceal">¦</span> wait-for-routine-to-block read-move-routine
<span id="L363" class="LineNr">363 </span> <span class="Conceal">¦</span> read-move-state:num <span class="Special">&lt;-</span> routine-state read-move-routine
<span id="L364" class="LineNr">364 </span> <span class="Conceal">¦</span> waiting?:bool <span class="Special">&lt;-</span> not-equal read-move-state, <span class="Constant">2/discontinued</span>
@ -431,7 +431,7 @@ if ('onhashchange' in window) {
<span id="L367" class="LineNr">367 </span> <span class="Conceal">¦</span> <span class="Comment"># press 'a'</span>
<span id="L368" class="LineNr">368 </span> <span class="Conceal">¦</span> <a href='075channel.mu.html#L47'>sink</a> <span class="Special">&lt;-</span> <a href='075channel.mu.html#L67'>write</a> <a href='075channel.mu.html#L47'>sink</a>, <span class="Constant">97/a</span>
<span id="L369" class="LineNr">369 </span> <span class="Conceal">¦</span> restart read-move-routine
<span id="L370" class="LineNr">370 </span> <span class="Conceal">¦</span> <span class="Comment"># 'read-move' still waiting for input</span>
<span id="L370" class="LineNr">370 </span> <span class="Conceal">¦</span> <span class="Comment"># 'read-move' still waiting for keypress</span>
<span id="L371" class="LineNr">371 </span> <span class="Conceal">¦</span> wait-for-routine-to-block read-move-routine
<span id="L372" class="LineNr">372 </span> <span class="Conceal">¦</span> read-move-state <span class="Special">&lt;-</span> routine-state read-move-routine
<span id="L373" class="LineNr">373 </span> <span class="Conceal">¦</span> waiting? <span class="Special">&lt;-</span> not-equal read-move-state, <span class="Constant">2/discontinued</span>
@ -440,7 +440,7 @@ if ('onhashchange' in window) {
<span id="L376" class="LineNr">376 </span> <span class="Conceal">¦</span> <span class="Comment"># press '2'</span>
<span id="L377" class="LineNr">377 </span> <span class="Conceal">¦</span> <a href='075channel.mu.html#L47'>sink</a> <span class="Special">&lt;-</span> <a href='075channel.mu.html#L67'>write</a> <a href='075channel.mu.html#L47'>sink</a>, <span class="Constant">50/'2'</span>
<span id="L378" class="LineNr">378 </span> <span class="Conceal">¦</span> restart read-move-routine
<span id="L379" class="LineNr">379 </span> <span class="Conceal">¦</span> <span class="Comment"># 'read-move' still waiting for input</span>
<span id="L379" class="LineNr">379 </span> <span class="Conceal">¦</span> <span class="Comment"># 'read-move' still waiting for keypress</span>
<span id="L380" class="LineNr">380 </span> <span class="Conceal">¦</span> wait-for-routine-to-block read-move-routine
<span id="L381" class="LineNr">381 </span> <span class="Conceal">¦</span> read-move-state <span class="Special">&lt;-</span> routine-state read-move-routine
<span id="L382" class="LineNr">382 </span> <span class="Conceal">¦</span> waiting? <span class="Special">&lt;-</span> not-equal read-move-state, <span class="Constant">2/discontinued</span>
@ -449,7 +449,7 @@ if ('onhashchange' in window) {
<span id="L385" class="LineNr">385 </span> <span class="Conceal">¦</span> <span class="Comment"># press '-'</span>
<span id="L386" class="LineNr">386 </span> <span class="Conceal">¦</span> <a href='075channel.mu.html#L47'>sink</a> <span class="Special">&lt;-</span> <a href='075channel.mu.html#L67'>write</a> <a href='075channel.mu.html#L47'>sink</a>, <span class="Constant">45/'-'</span>
<span id="L387" class="LineNr">387 </span> <span class="Conceal">¦</span> restart read-move-routine
<span id="L388" class="LineNr">388 </span> <span class="Conceal">¦</span> <span class="Comment"># 'read-move' still waiting for input</span>
<span id="L388" class="LineNr">388 </span> <span class="Conceal">¦</span> <span class="Comment"># 'read-move' still waiting for keypress</span>
<span id="L389" class="LineNr">389 </span> <span class="Conceal">¦</span> wait-for-routine-to-block read-move-routine
<span id="L390" class="LineNr">390 </span> <span class="Conceal">¦</span> read-move-state <span class="Special">&lt;-</span> routine-state read-move-routine
<span id="L391" class="LineNr">391 </span> <span class="Conceal">¦</span> waiting? <span class="Special">&lt;-</span> not-equal read-move-state, <span class="Constant">2/discontinued</span>
@ -458,7 +458,7 @@ if ('onhashchange' in window) {
<span id="L394" class="LineNr">394 </span> <span class="Conceal">¦</span> <span class="Comment"># press 'a'</span>
<span id="L395" class="LineNr">395 </span> <span class="Conceal">¦</span> <a href='075channel.mu.html#L47'>sink</a> <span class="Special">&lt;-</span> <a href='075channel.mu.html#L67'>write</a> <a href='075channel.mu.html#L47'>sink</a>, <span class="Constant">97/a</span>
<span id="L396" class="LineNr">396 </span> <span class="Conceal">¦</span> restart read-move-routine
<span id="L397" class="LineNr">397 </span> <span class="Conceal">¦</span> <span class="Comment"># 'read-move' still waiting for input</span>
<span id="L397" class="LineNr">397 </span> <span class="Conceal">¦</span> <span class="Comment"># 'read-move' still waiting for keypress</span>
<span id="L398" class="LineNr">398 </span> <span class="Conceal">¦</span> wait-for-routine-to-block read-move-routine
<span id="L399" class="LineNr">399 </span> <span class="Conceal">¦</span> read-move-state <span class="Special">&lt;-</span> routine-state read-move-routine
<span id="L400" class="LineNr">400 </span> <span class="Conceal">¦</span> waiting? <span class="Special">&lt;-</span> not-equal read-move-state, <span class="Constant">2/discontinued</span>
@ -467,7 +467,7 @@ if ('onhashchange' in window) {
<span id="L403" class="LineNr">403 </span> <span class="Conceal">¦</span> <span class="Comment"># press '4'</span>
<span id="L404" class="LineNr">404 </span> <span class="Conceal">¦</span> <a href='075channel.mu.html#L47'>sink</a> <span class="Special">&lt;-</span> <a href='075channel.mu.html#L67'>write</a> <a href='075channel.mu.html#L47'>sink</a>, <span class="Constant">52/'4'</span>
<span id="L405" class="LineNr">405 </span> <span class="Conceal">¦</span> restart read-move-routine
<span id="L406" class="LineNr">406 </span> <span class="Conceal">¦</span> <span class="Comment"># 'read-move' still waiting for input</span>
<span id="L406" class="LineNr">406 </span> <span class="Conceal">¦</span> <span class="Comment"># 'read-move' still waiting for keypress</span>
<span id="L407" class="LineNr">407 </span> <span class="Conceal">¦</span> wait-for-routine-to-block read-move-routine
<span id="L408" class="LineNr">408 </span> <span class="Conceal">¦</span> read-move-state <span class="Special">&lt;-</span> routine-state read-move-routine
<span id="L409" class="LineNr">409 </span> <span class="Conceal">¦</span> waiting? <span class="Special">&lt;-</span> not-equal read-move-state, <span class="Constant">2/discontinued</span>
@ -495,7 +495,7 @@ if ('onhashchange' in window) {
<span id="L431" class="LineNr">431 </span> <a href='075channel.mu.html#L43'>source</a>:&amp;:<a href='075channel.mu.html#L43'>source</a>:char, <a href='075channel.mu.html#L47'>sink</a>:&amp;:<a href='075channel.mu.html#L47'>sink</a>:char <span class="Special">&lt;-</span> <a href='075channel.mu.html#L51'>new-channel</a> <span class="Constant">2/capacity</span>
<span id="L432" class="LineNr">432 </span> read-move-routine:num <span class="Special">&lt;-</span> start-running <a href='chessboard.mu.html#L238'>read-move</a>, <a href='075channel.mu.html#L43'>source</a>, <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a>
<span id="L433" class="LineNr">433 </span> run [
<span id="L434" class="LineNr">434 </span> <span class="Conceal">¦</span> <span class="Comment"># 'read-move' is waiting for input</span>
<span id="L434" class="LineNr">434 </span> <span class="Conceal">¦</span> <span class="Comment"># 'read-move' is waiting for keypress</span>
<span id="L435" class="LineNr">435 </span> <span class="Conceal">¦</span> wait-for-routine-to-block read-move-routine
<span id="L436" class="LineNr">436 </span> <span class="Conceal">¦</span> read-move-state:num <span class="Special">&lt;-</span> routine-state read-move-routine
<span id="L437" class="LineNr">437 </span> <span class="Conceal">¦</span> waiting?:bool <span class="Special">&lt;-</span> not-equal read-move-state, <span class="Constant">2/discontinued</span>
@ -523,7 +523,7 @@ if ('onhashchange' in window) {
<span id="L459" class="LineNr">459 </span> <a href='075channel.mu.html#L43'>source</a>:&amp;:<a href='075channel.mu.html#L43'>source</a>:char, <a href='075channel.mu.html#L47'>sink</a>:&amp;:<a href='075channel.mu.html#L47'>sink</a>:char <span class="Special">&lt;-</span> <a href='075channel.mu.html#L51'>new-channel</a> <span class="Constant">2/capacity</span>
<span id="L460" class="LineNr">460 </span> read-move-routine:num <span class="Special">&lt;-</span> start-running <a href='chessboard.mu.html#L238'>read-move</a>, <a href='075channel.mu.html#L43'>source</a>, <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a>
<span id="L461" class="LineNr">461 </span> run [
<span id="L462" class="LineNr">462 </span> <span class="Conceal">¦</span> <span class="Comment"># 'read-move' is waiting for input</span>
<span id="L462" class="LineNr">462 </span> <span class="Conceal">¦</span> <span class="Comment"># 'read-move' is waiting for keypress</span>
<span id="L463" class="LineNr">463 </span> <span class="Conceal">¦</span> wait-for-routine-to-block read-move-routine
<span id="L464" class="LineNr">464 </span> <span class="Conceal">¦</span> read-move-state:num <span class="Special">&lt;-</span> routine-state read-move-routine
<span id="L465" class="LineNr">465 </span> <span class="Conceal">¦</span> waiting?:bool <span class="Special">&lt;-</span> not-equal read-move-state, <span class="Constant">2/discontinued</span>
@ -545,7 +545,7 @@ if ('onhashchange' in window) {
<span id="L481" class="LineNr">481 </span> <a href='075channel.mu.html#L43'>source</a>:&amp;:<a href='075channel.mu.html#L43'>source</a>:char, <a href='075channel.mu.html#L47'>sink</a>:&amp;:<a href='075channel.mu.html#L47'>sink</a>:char <span class="Special">&lt;-</span> <a href='075channel.mu.html#L51'>new-channel</a> <span class="Constant">2/capacity</span>
<span id="L482" class="LineNr">482 </span> read-move-routine:num <span class="Special">&lt;-</span> start-running <a href='chessboard.mu.html#L238'>read-move</a>, <a href='075channel.mu.html#L43'>source</a>, <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a>
<span id="L483" class="LineNr">483 </span> run [
<span id="L484" class="LineNr">484 </span> <span class="Conceal">¦</span> <span class="Comment"># 'read-move' is waiting for input</span>
<span id="L484" class="LineNr">484 </span> <span class="Conceal">¦</span> <span class="Comment"># 'read-move' is waiting for keypress</span>
<span id="L485" class="LineNr">485 </span> <span class="Conceal">¦</span> wait-for-routine-to-block read-move-routine
<span id="L486" class="LineNr">486 </span> <span class="Conceal">¦</span> read-move-state:num <span class="Special">&lt;-</span> routine-state read-move-routine
<span id="L487" class="LineNr">487 </span> <span class="Conceal">¦</span> waiting?:bool <span class="Special">&lt;-</span> not-equal read-move-state, <span class="Constant">2/discontinued</span>
@ -568,7 +568,7 @@ if ('onhashchange' in window) {
<span id="L504" class="LineNr">504 </span> <a href='075channel.mu.html#L43'>source</a>:&amp;:<a href='075channel.mu.html#L43'>source</a>:char, <a href='075channel.mu.html#L47'>sink</a>:&amp;:<a href='075channel.mu.html#L47'>sink</a>:char <span class="Special">&lt;-</span> <a href='075channel.mu.html#L51'>new-channel</a> <span class="Constant">2/capacity</span>
<span id="L505" class="LineNr">505 </span> read-move-routine:num <span class="Special">&lt;-</span> start-running <a href='chessboard.mu.html#L238'>read-move</a>, <a href='075channel.mu.html#L43'>source</a>, <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a>
<span id="L506" class="LineNr">506 </span> run [
<span id="L507" class="LineNr">507 </span> <span class="Conceal">¦</span> <span class="Comment"># 'read-move' is waiting for input</span>
<span id="L507" class="LineNr">507 </span> <span class="Conceal">¦</span> <span class="Comment"># 'read-move' is waiting for keypress</span>
<span id="L508" class="LineNr">508 </span> <span class="Conceal">¦</span> wait-for-routine-to-block read-move-routine
<span id="L509" class="LineNr">509 </span> <span class="Conceal">¦</span> read-move-state:num <span class="Special">&lt;-</span> routine-state read-move-routine
<span id="L510" class="LineNr">510 </span> <span class="Conceal">¦</span> waiting?:bool <span class="Special">&lt;-</span> not-equal read-move-state, <span class="Constant">2/discontinued</span>
@ -587,7 +587,7 @@ if ('onhashchange' in window) {
<span id="L523" class="LineNr">523 </span>
<span id="L524" class="LineNr">524 </span><span class="muRecipe">def</span> <a href='chessboard.mu.html#L524'>make-move</a> <a href='chessboard.mu.html#L67'>board</a>:<a href='chessboard.mu.html#L67'>board</a>, m:&amp;:<a href='chessboard.mu.html#L229'>move</a><span class="muRecipe"> -&gt; </span><a href='chessboard.mu.html#L67'>board</a>:<a href='chessboard.mu.html#L67'>board</a> [
<span id="L525" class="LineNr">525 </span> <span class="Constant">local-scope</span>
<span id="L526" class="LineNr">526 </span> <span class="Constant">load-ingredients</span>
<span id="L526" class="LineNr">526 </span> <span class="Constant">load-inputs</span>
<span id="L527" class="LineNr">527 </span> from-file:num <span class="Special">&lt;-</span> get *m, <span class="Constant">from-file:offset</span>
<span id="L528" class="LineNr">528 </span> from-rank:num <span class="Special">&lt;-</span> get *m, <span class="Constant">from-rank:offset</span>
<span id="L529" class="LineNr">529 </span> to-file:num <span class="Special">&lt;-</span> get *m, <span class="Constant">to-file:offset</span>

View File

@ -77,7 +77,7 @@ if ('onhashchange' in window) {
<span id="L19" class="LineNr">19 </span>
<span id="L20" class="LineNr">20 </span><span class="muRecipe">def</span> <a href='continuation1.mu.html#L20'>create-yielder</a><span class="muRecipe"> -&gt; </span>n:num [
<span id="L21" class="LineNr">21 </span> <span class="Constant">local-scope</span>
<span id="L22" class="LineNr">22 </span> <span class="Constant">load-ingredients</span>
<span id="L22" class="LineNr">22 </span> <span class="Constant">load-inputs</span>
<span id="L23" class="LineNr">23 </span> return-continuation-until-mark
<span id="L24" class="LineNr">24 </span> <span class="muControl">return</span><span class="Constant"> 1</span>
<span id="L25" class="LineNr">25 </span>]

View File

@ -88,7 +88,7 @@ if ('onhashchange' in window) {
<span id="L28" class="LineNr">28 </span>
<span id="L29" class="LineNr">29 </span><span class="muRecipe">def</span> <a href='continuation2.mu.html#L29'>create-yielder</a> l:&amp;:<a href='064list.mu.html#L6'>list</a>:num<span class="muRecipe"> -&gt; </span>n:num, done?:bool [
<span id="L30" class="LineNr">30 </span> <span class="Constant">local-scope</span>
<span id="L31" class="LineNr">31 </span> <span class="Constant">load-ingredients</span>
<span id="L31" class="LineNr">31 </span> <span class="Constant">load-inputs</span>
<span id="L32" class="LineNr">32 </span> return-continuation-until-mark
<span id="L33" class="LineNr">33 </span> done? <span class="Special">&lt;-</span> equal l,<span class="Constant"> 0</span>
<span id="L34" class="LineNr">34 </span> <span class="muControl">return-if</span> done?,<span class="Constant"> 0</span>

View File

@ -90,7 +90,7 @@ if ('onhashchange' in window) {
<span id="L30" class="LineNr">30 </span>
<span id="L31" class="LineNr">31 </span><span class="muRecipe">def</span> <a href='continuation4.mu.html#L31'>create-yielder</a> l:&amp;:<a href='064list.mu.html#L6'>list</a>:num<span class="muRecipe"> -&gt; </span>n:num, done?:bool [
<span id="L32" class="LineNr">32 </span> <span class="Constant">local-scope</span>
<span id="L33" class="LineNr">33 </span> <span class="Constant">load-ingredients</span>
<span id="L33" class="LineNr">33 </span> <span class="Constant">load-inputs</span>
<span id="L34" class="LineNr">34 </span> <span class="Delimiter">{</span>
<span id="L35" class="LineNr">35 </span> <span class="Conceal">¦</span> done? <span class="Special">&lt;-</span> equal l,<span class="Constant"> 0</span>
<span id="L36" class="LineNr">36 </span> <span class="Conceal">¦</span> <span class="muControl">break-if</span> done?

View File

@ -59,7 +59,7 @@ if ('onhashchange' in window) {
<body onload='JumpToLine();'>
<pre id='vimCodeElement'>
<span id="L1" class="LineNr"> 1 </span><span class="Comment"># Example program showing that a 'paused' continuation can be 'resumed' with</span>
<span id="L2" class="LineNr"> 2 </span><span class="Comment"># ingredients.</span>
<span id="L2" class="LineNr"> 2 </span><span class="Comment"># inputs.</span>
<span id="L3" class="LineNr"> 3 </span><span class="Comment">#</span>
<span id="L4" class="LineNr"> 4 </span><span class="Comment"># Print out a list of numbers, first adding 0 to the first, 1 to the second, 2</span>
<span id="L5" class="LineNr"> 5 </span><span class="Comment"># to the third, and so on.</span>
@ -93,7 +93,7 @@ if ('onhashchange' in window) {
<span id="L33" class="LineNr">33 </span>
<span id="L34" class="LineNr">34 </span><span class="muRecipe">def</span> <a href='continuation5.mu.html#L34'>create-yielder</a> l:&amp;:<a href='064list.mu.html#L6'>list</a>:num<span class="muRecipe"> -&gt; </span>n:num, done?:bool [
<span id="L35" class="LineNr">35 </span> <span class="Constant">local-scope</span>
<span id="L36" class="LineNr">36 </span> <span class="Constant">load-ingredients</span>
<span id="L36" class="LineNr">36 </span> <span class="Constant">load-inputs</span>
<span id="L37" class="LineNr">37 </span> a:num <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
<span id="L38" class="LineNr">38 </span> <span class="Delimiter">{</span>
<span id="L39" class="LineNr">39 </span> <span class="Conceal">¦</span> done? <span class="Special">&lt;-</span> equal l,<span class="Constant"> 0</span>

View File

@ -60,12 +60,12 @@ if ('onhashchange' in window) {
<span id="L3" class="LineNr"> 3 </span>
<span id="L4" class="LineNr"> 4 </span><span class="muRecipe">def</span> <a href='counters.mu.html#L4'>new-counter</a> n:num<span class="muRecipe"> -&gt; </span><span class="Constant">default-space</span>:space [
<span id="L5" class="LineNr"> 5 </span> <span class="Constant">default-space</span> <span class="Special">&lt;-</span> new <span class="Constant">location:type</span>,<span class="Constant"> 30</span>
<span id="L6" class="LineNr"> 6 </span> <span class="Constant">load-ingredients</span> <span class="Comment"># initialize n</span>
<span id="L6" class="LineNr"> 6 </span> <span class="Constant">load-inputs</span> <span class="Comment"># initialize n</span>
<span id="L7" class="LineNr"> 7 </span>]
<span id="L8" class="LineNr"> 8 </span>
<span id="L9" class="LineNr"> 9 </span><span class="muRecipe">def</span> <a href='counters.mu.html#L9'>increment-counter</a> outer:space/names:<a href='counters.mu.html#L4'>new-counter</a>, x:num<span class="muRecipe"> -&gt; </span>n:num/space:1 [
<span id="L10" class="LineNr">10 </span> <span class="Constant">local-scope</span>
<span id="L11" class="LineNr">11 </span> <span class="Constant">load-ingredients</span>
<span id="L11" class="LineNr">11 </span> <span class="Constant">load-inputs</span>
<span id="L12" class="LineNr">12 </span> 0:space/names:<a href='counters.mu.html#L4'>new-counter</a> <span class="Special">&lt;-</span> copy outer <span class="Comment"># setup outer space; it *must* come from 'new-counter'</span>
<span id="L13" class="LineNr">13 </span> n/space:1 <span class="Special">&lt;-</span> add n/space:1, x
<span id="L14" class="LineNr">14 </span>]

View File

@ -68,7 +68,7 @@ if ('onhashchange' in window) {
<span id="L4" class="LineNr"> 4 </span><span class="Comment"># screen dimensions, then stop</span>
<span id="L5" class="LineNr"> 5 </span><span class="muRecipe">def</span> main text:text [
<span id="L6" class="LineNr"> 6 </span> <span class="Constant">local-scope</span>
<span id="L7" class="LineNr"> 7 </span> <span class="Constant">load-ingredients</span>
<span id="L7" class="LineNr"> 7 </span> <span class="Constant">load-inputs</span>
<span id="L8" class="LineNr"> 8 </span> open-console
<span id="L9" class="LineNr"> 9 </span> <a href='../081print.mu.html#L46'>clear-screen</a> <span class="Constant">0/screen</span> <span class="Comment"># non-scrolling app</span>
<span id="L10" class="LineNr"> 10 </span> e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> text, <span class="Constant">0/left</span>, <span class="Constant">5/right</span>
@ -114,7 +114,7 @@ if ('onhashchange' in window) {
<span id="L50" class="LineNr"> 50 </span><span class="Comment"># right is exclusive</span>
<span id="L51" class="LineNr"> 51 </span><span class="muRecipe">def</span> <a href='001-editor.mu.html#L51'>new-editor</a> s:text, left:num, right:num<span class="muRecipe"> -&gt; </span>result:&amp;:editor [
<span id="L52" class="LineNr"> 52 </span> <span class="Constant">local-scope</span>
<span id="L53" class="LineNr"> 53 </span> <span class="Constant">load-ingredients</span>
<span id="L53" class="LineNr"> 53 </span> <span class="Constant">load-inputs</span>
<span id="L54" class="LineNr"> 54 </span> <span class="Comment"># no clipping of bounds</span>
<span id="L55" class="LineNr"> 55 </span> right <span class="Special">&lt;-</span> subtract right,<span class="Constant"> 1</span>
<span id="L56" class="LineNr"> 56 </span> result <span class="Special">&lt;-</span> new <span class="Constant">editor:type</span>
@ -135,7 +135,7 @@ if ('onhashchange' in window) {
<span id="L71" class="LineNr"> 71 </span>
<span id="L72" class="LineNr"> 72 </span><span class="muRecipe">def</span> <a href='001-editor.mu.html#L72'>insert-text</a> editor:&amp;:editor, text:text<span class="muRecipe"> -&gt; </span>editor:&amp;:editor [
<span id="L73" class="LineNr"> 73 </span> <span class="Constant">local-scope</span>
<span id="L74" class="LineNr"> 74 </span> <span class="Constant">load-ingredients</span>
<span id="L74" class="LineNr"> 74 </span> <span class="Constant">load-inputs</span>
<span id="L75" class="LineNr"> 75 </span> curr:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">data:offset</span>
<span id="L76" class="LineNr"> 76 </span> insert curr, text
<span id="L77" class="LineNr"> 77 </span>]
@ -170,7 +170,7 @@ if ('onhashchange' in window) {
<span id="L106" class="LineNr">106 </span><span class="Comment"># outside text.</span>
<span id="L107" class="LineNr">107 </span><span class="muRecipe">def</span> <a href='001-editor.mu.html#L107'>render</a> <a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a>, editor:&amp;:editor<span class="muRecipe"> -&gt; </span>last-row:num, last-column:num, <a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a>, editor:&amp;:editor [
<span id="L108" class="LineNr">108 </span> <span class="Constant">local-scope</span>
<span id="L109" class="LineNr">109 </span> <span class="Constant">load-ingredients</span>
<span id="L109" class="LineNr">109 </span> <span class="Constant">load-inputs</span>
<span id="L110" class="LineNr">110 </span> <span class="muControl">return-unless</span> editor, <span class="Constant">1/top</span>, <span class="Constant">0/left</span>
<span id="L111" class="LineNr">111 </span> left:num <span class="Special">&lt;-</span> get *editor, <span class="Constant">left:offset</span>
<span id="L112" class="LineNr">112 </span> <a href='../081print.mu.html#L782'>screen-height</a>:num <span class="Special">&lt;-</span> <a href='../081print.mu.html#L782'>screen-height</a> <a href='../081print.mu.html#L16'>screen</a>
@ -270,7 +270,7 @@ if ('onhashchange' in window) {
<span id="L206" class="LineNr">206 </span>
<span id="L207" class="LineNr">207 </span><span class="muRecipe">def</span> <a href='001-editor.mu.html#L207'>clear-screen-from</a> <a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a>, row:num, column:num, left:num, right:num<span class="muRecipe"> -&gt; </span><a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a> [
<span id="L208" class="LineNr">208 </span> <span class="Constant">local-scope</span>
<span id="L209" class="LineNr">209 </span> <span class="Constant">load-ingredients</span>
<span id="L209" class="LineNr">209 </span> <span class="Constant">load-inputs</span>
<span id="L210" class="LineNr">210 </span><span class="CommentedCode">#? stash [clear-screen-from] row column [between] left [and] right</span>
<span id="L211" class="LineNr">211 </span> <span class="Comment"># if it's the real screen, use the optimized primitive</span>
<span id="L212" class="LineNr">212 </span> <span class="Delimiter">{</span>
@ -286,7 +286,7 @@ if ('onhashchange' in window) {
<span id="L222" class="LineNr">222 </span>
<span id="L223" class="LineNr">223 </span><span class="muRecipe">def</span> <a href='001-editor.mu.html#L223'>clear-rest-of-screen</a> <a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a>, row:num, left:num, right:num<span class="muRecipe"> -&gt; </span><a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a> [
<span id="L224" class="LineNr">224 </span> <span class="Constant">local-scope</span>
<span id="L225" class="LineNr">225 </span> <span class="Constant">load-ingredients</span>
<span id="L225" class="LineNr">225 </span> <span class="Constant">load-inputs</span>
<span id="L226" class="LineNr">226 </span> row <span class="Special">&lt;-</span> add row,<span class="Constant"> 1</span>
<span id="L227" class="LineNr">227 </span> <span class="Comment"># if it's the real screen, use the optimized primitive</span>
<span id="L228" class="LineNr">228 </span> <span class="Delimiter">{</span>
@ -460,7 +460,7 @@ if ('onhashchange' in window) {
<span id="L396" class="LineNr">396 </span><span class="Comment"># so far the previous color is all the information we need; that may change</span>
<span id="L397" class="LineNr">397 </span><span class="muRecipe">def</span> <a href='001-editor.mu.html#L397'>get-color</a> color:num, c:char<span class="muRecipe"> -&gt; </span>color:num [
<span id="L398" class="LineNr">398 </span> <span class="Constant">local-scope</span>
<span id="L399" class="LineNr">399 </span> <span class="Constant">load-ingredients</span>
<span id="L399" class="LineNr">399 </span> <span class="Constant">load-inputs</span>
<span id="L400" class="LineNr">400 </span> color-is-white?:bool <span class="Special">&lt;-</span> equal color, <span class="Constant">7/white</span>
<span id="L401" class="LineNr">401 </span> <span class="Comment"># if color is white and next character is '#', switch color to blue</span>
<span id="L402" class="LineNr">402 </span> <span class="Delimiter">{</span>

Some files were not shown because too many files have changed in this diff Show More