about summary refs log tree commit diff stats
path: root/cpp/.traces
diff options
context:
space:
mode:
authorKartik K. Agaram <vc@akkartik.com>2015-05-05 21:17:24 -0700
committerKartik K. Agaram <vc@akkartik.com>2015-05-05 21:17:24 -0700
commitb96af395b9af2ff9df94b3e82213171f30827c8d (patch)
tree17c8c12648ccc25625e2534ec8d74fbe8f1542cc /cpp/.traces
parent2e3b597fe85b654e82b891c22d50754fa5a26156 (diff)
downloadmu-b96af395b9af2ff9df94b3e82213171f30827c8d.tar.gz
1276 - make C++ version the default
I've tried to update the Readme, but there are at least a couple of issues.
Diffstat (limited to 'cpp/.traces')
-rw-r--r--cpp/.traces/add32
-rw-r--r--cpp/.traces/add_literal14
-rw-r--r--cpp/.traces/and32
-rw-r--r--cpp/.traces/array-from-args329
-rw-r--r--cpp/.traces/array_length42
-rw-r--r--cpp/.traces/assert11
-rw-r--r--cpp/.traces/brace_conversion11
-rw-r--r--cpp/.traces/brace_conversion_and_run195
-rw-r--r--cpp/.traces/break_cascading17
-rw-r--r--cpp/.traces/break_cascading225
-rw-r--r--cpp/.traces/break_empty_block11
-rw-r--r--cpp/.traces/break_if26
-rw-r--r--cpp/.traces/break_label12
-rw-r--r--cpp/.traces/break_nested27
-rw-r--r--cpp/.traces/break_nested_degenerate23
-rw-r--r--cpp/.traces/break_nested_degenerate219
-rw-r--r--cpp/.traces/break_unless20
-rw-r--r--cpp/.traces/buffer-append-works1146
-rw-r--r--cpp/.traces/calling_recipe19
-rw-r--r--cpp/.traces/channel430
-rw-r--r--cpp/.traces/channel-initialization147
-rw-r--r--cpp/.traces/channel-new-empty-not-full262
-rw-r--r--cpp/.traces/channel-read-increments-full474
-rw-r--r--cpp/.traces/channel-read-not-full592
-rw-r--r--cpp/.traces/channel-wrap882
-rw-r--r--cpp/.traces/channel-write-full457
-rw-r--r--cpp/.traces/channel-write-increments-free339
-rw-r--r--cpp/.traces/channel-write-not-empty454
-rw-r--r--cpp/.traces/check_string_in_memory78
-rw-r--r--cpp/.traces/check_trace41
-rw-r--r--cpp/.traces/check_trace_instruction37
-rw-r--r--cpp/.traces/check_trace_negative41
-rw-r--r--cpp/.traces/clear-line-erases-printed-characters1170
-rw-r--r--cpp/.traces/clear-line-erases-printed-characters21718
-rw-r--r--cpp/.traces/closure140
-rw-r--r--cpp/.traces/container5
-rw-r--r--cpp/.traces/convert_names12
-rw-r--r--cpp/.traces/convert_names_handles_containers11
-rw-r--r--cpp/.traces/convert_names_passes_default_space12
-rw-r--r--cpp/.traces/convert_names_passes_dummy12
-rw-r--r--cpp/.traces/convert_names_passes_raw11
-rw-r--r--cpp/.traces/convert_names_transforms_container_elements35
-rw-r--r--cpp/.traces/convert_names_warns14
-rw-r--r--cpp/.traces/copy20
-rw-r--r--cpp/.traces/copy_array50
-rw-r--r--cpp/.traces/copy_array_indirect59
-rw-r--r--cpp/.traces/copy_exclusive_container40
-rw-r--r--cpp/.traces/copy_handles_nested_container_elements40
-rw-r--r--cpp/.traces/copy_indirect29
-rw-r--r--cpp/.traces/copy_literal11
-rw-r--r--cpp/.traces/copy_multiple_locations30
-rw-r--r--cpp/.traces/deref_sidesteps_default_space44
-rw-r--r--cpp/.traces/deref_sidesteps_default_space_in_get57
-rw-r--r--cpp/.traces/deref_sidesteps_default_space_in_index65
-rw-r--r--cpp/.traces/divide33
-rw-r--r--cpp/.traces/divide_literal15
-rw-r--r--cpp/.traces/divide_with_remainder35
-rw-r--r--cpp/.traces/divide_with_remainder_literal17
-rw-r--r--cpp/.traces/equal32
-rw-r--r--cpp/.traces/equal232
-rw-r--r--cpp/.traces/exclusive_container5
-rw-r--r--cpp/.traces/first_recipe3
-rw-r--r--cpp/.traces/first_scenario_in_mu42
-rw-r--r--cpp/.traces/get33
-rw-r--r--cpp/.traces/get_address31
-rw-r--r--cpp/.traces/get_address_indirect40
-rw-r--r--cpp/.traces/get_default_space18
-rw-r--r--cpp/.traces/get_handles_nested_container_elements41
-rw-r--r--cpp/.traces/get_indirect42
-rw-r--r--cpp/.traces/greater_or_equal32
-rw-r--r--cpp/.traces/greater_or_equal232
-rw-r--r--cpp/.traces/greater_or_equal332
-rw-r--r--cpp/.traces/greater_than32
-rw-r--r--cpp/.traces/greater_than232
-rw-r--r--cpp/.traces/include_nonderef_properties42
-rw-r--r--cpp/.traces/index49
-rw-r--r--cpp/.traces/index_address47
-rw-r--r--cpp/.traces/index_direct_offset58
-rw-r--r--cpp/.traces/index_indirect58
-rw-r--r--cpp/.traces/ingredient25
-rw-r--r--cpp/.traces/integer-to-decimal-digit-negative611
-rw-r--r--cpp/.traces/integer-to-decimal-digit-positive837
-rw-r--r--cpp/.traces/integer-to-decimal-digit-zero75
-rw-r--r--cpp/.traces/interpolate-at-end944
-rw-r--r--cpp/.traces/interpolate-at-start925
-rw-r--r--cpp/.traces/interpolate-works728
-rw-r--r--cpp/.traces/jump_backward24
-rw-r--r--cpp/.traces/jump_can_skip_instructions14
-rw-r--r--cpp/.traces/jump_if16
-rw-r--r--cpp/.traces/jump_if_fallthrough19
-rw-r--r--cpp/.traces/jump_unless16
-rw-r--r--cpp/.traces/jump_unless_fallthrough19
-rw-r--r--cpp/.traces/keyboard_in_scenario465
-rw-r--r--cpp/.traces/lesser_or_equal32
-rw-r--r--cpp/.traces/lesser_or_equal232
-rw-r--r--cpp/.traces/lesser_or_equal332
-rw-r--r--cpp/.traces/lesser_than32
-rw-r--r--cpp/.traces/lesser_than232
-rw-r--r--cpp/.traces/loop21
-rw-r--r--cpp/.traces/loop_label10
-rw-r--r--cpp/.traces/loop_nested28
-rw-r--r--cpp/.traces/loop_unless20
-rw-r--r--cpp/.traces/maybe_convert37
-rw-r--r--cpp/.traces/maybe_convert_fail37
-rw-r--r--cpp/.traces/maybe_convert_named38
-rw-r--r--cpp/.traces/memory_check18
-rw-r--r--cpp/.traces/memory_check_multiple23
-rw-r--r--cpp/.traces/memory_check_string52
-rw-r--r--cpp/.traces/memory_check_string_length52
-rw-r--r--cpp/.traces/multiply33
-rw-r--r--cpp/.traces/multiply_literal15
-rw-r--r--cpp/.traces/new34
-rw-r--r--cpp/.traces/new_array36
-rw-r--r--cpp/.traces/new_concurrent43
-rw-r--r--cpp/.traces/new_overflow22
-rw-r--r--cpp/.traces/new_string26
-rw-r--r--cpp/.traces/next_ingredient28
-rw-r--r--cpp/.traces/next_ingredient_missing15
-rw-r--r--cpp/.traces/not21
-rw-r--r--cpp/.traces/or32
-rw-r--r--cpp/.traces/parse_comment_after_instruction3
-rw-r--r--cpp/.traces/parse_comment_amongst_instruction3
-rw-r--r--cpp/.traces/parse_comment_amongst_instruction23
-rw-r--r--cpp/.traces/parse_comment_amongst_instruction36
-rw-r--r--cpp/.traces/parse_comment_outside_recipe3
-rw-r--r--cpp/.traces/parse_dollar_as_recipe_name1
-rw-r--r--cpp/.traces/parse_label1
-rw-r--r--cpp/.traces/parse_multiple_ingredients5
-rw-r--r--cpp/.traces/parse_multiple_products4
-rw-r--r--cpp/.traces/parse_multiple_properties3
-rw-r--r--cpp/.traces/parse_multiple_types5
-rw-r--r--cpp/.traces/parse_properties3
-rw-r--r--cpp/.traces/print-character-at-top-left595
-rw-r--r--cpp/.traces/print-character-at-top-left2540
-rw-r--r--cpp/.traces/read-key-in-mu465
-rw-r--r--cpp/.traces/reply42
-rw-r--r--cpp/.traces/reply_container35
-rw-r--r--cpp/.traces/reply_same_as_ingredient36
-rw-r--r--cpp/.traces/return_on_fallthrough48
-rw-r--r--cpp/.traces/rewind_ingredients36
-rw-r--r--cpp/.traces/routine_state_test39
-rw-r--r--cpp/.traces/run25
-rw-r--r--cpp/.traces/run_dummy10
-rw-r--r--cpp/.traces/run_label21
-rw-r--r--cpp/.traces/run_multiple47
-rw-r--r--cpp/.traces/scenario_block39
-rw-r--r--cpp/.traces/scenario_check_memory_and_trace76
-rw-r--r--cpp/.traces/scenario_multiple_blocks80
-rw-r--r--cpp/.traces/scenario_with_comment_in_mu46
-rw-r--r--cpp/.traces/scenario_with_multiple_comments_in_mu50
-rw-r--r--cpp/.traces/scheduler28
-rw-r--r--cpp/.traces/scheduler_interleaves_routines49
-rw-r--r--cpp/.traces/scheduler_runs_single_routine21
-rw-r--r--cpp/.traces/scheduler_skips_completed_routines28
-rw-r--r--cpp/.traces/scheduler_starts_at_middle_of_routines20
-rw-r--r--cpp/.traces/screen_in_scenario899
-rw-r--r--cpp/.traces/screen_in_scenario_error886
-rw-r--r--cpp/.traces/set_default_space26
-rw-r--r--cpp/.traces/start_running_returns_routine_id22
-rw-r--r--cpp/.traces/start_running_takes_args32
-rw-r--r--cpp/.traces/store_indirect20
-rw-r--r--cpp/.traces/string-append-1937
-rw-r--r--cpp/.traces/string-equal-common-lengths-but-distinct296
-rw-r--r--cpp/.traces/string-equal-distinct-lengths146
-rw-r--r--cpp/.traces/string-equal-identical322
-rw-r--r--cpp/.traces/string-equal-reflexive309
-rw-r--r--cpp/.traces/string-equal-with-empty120
-rw-r--r--cpp/.traces/string_literal3
-rw-r--r--cpp/.traces/string_literal_and_comment3
-rw-r--r--cpp/.traces/string_literal_nested3
-rw-r--r--cpp/.traces/string_literal_with_colons3
-rw-r--r--cpp/.traces/subtract32
-rw-r--r--cpp/.traces/subtract_literal14
-rw-r--r--cpp/.traces/surrounding_space51
-rw-r--r--cpp/.traces/trace10
-rw-r--r--cpp/.traces/trace_check_passes_silently37
-rw-r--r--cpp/.traces/trace_check_warns_on_failure21
-rw-r--r--cpp/.traces/trace_check_warns_on_failure_in_later_line42
-rw-r--r--cpp/.traces/trace_negative_check_passes_silently16
-rw-r--r--cpp/.traces/trace_negative_check_warns_on_any_unexpected_line42
-rw-r--r--cpp/.traces/trace_negative_check_warns_on_failure38
-rw-r--r--cpp/.traces/wait_for_location45
-rw-r--r--cpp/.traces/wait_for_routine47
183 files changed, 0 insertions, 23020 deletions
diff --git a/cpp/.traces/add b/cpp/.traces/add
deleted file mode 100644
index 51c64f81..00000000
--- a/cpp/.traces/add
+++ /dev/null
@@ -1,32 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "23", value: 0, type: 0, properties: ["23": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "34", value: 0, type: 0, properties: ["34": "literal"]}
-parse/0:   product: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-parse/0: instruction: add
-parse/0:   ingredient: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0:   ingredient: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-parse/0:   product: {name: "3", value: 0, type: 1, properties: ["3": "integer"]}
-after-brace/0: recipe main
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: add ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "23", value: 23, type: 0, properties: ["23": "literal"]}
-run/0: ingredient 0 is 23
-mem/0: storing 23 in location 1
-run/0: instruction main/1
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
-run/0: ingredient 0 is 34
-mem/0: storing 34 in location 2
-run/0: instruction main/2
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- add/2 {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "2", value: 2, type: 1, properties: ["2": "integer"]}
-run/0: ingredient 0 is 1
-mem/0: location 1 is 23
-run/0: ingredient 1 is 2
-mem/0: location 2 is 34
-run/0: product 0 is 57
-mem/0: storing 57 in location 3
diff --git a/cpp/.traces/add_literal b/cpp/.traces/add_literal
deleted file mode 100644
index c6dc982e..00000000
--- a/cpp/.traces/add_literal
+++ /dev/null
@@ -1,14 +0,0 @@
-parse/0: instruction: add
-parse/0:   ingredient: {name: "23", value: 0, type: 0, properties: ["23": "literal"]}
-parse/0:   ingredient: {name: "34", value: 0, type: 0, properties: ["34": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-after-brace/0: recipe main
-after-brace/0: add ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- add/2 {name: "23", value: 23, type: 0, properties: ["23": "literal"]}, {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
-run/0: ingredient 0 is 23
-run/0: ingredient 1 is 34
-run/0: product 0 is 57
-mem/0: storing 57 in location 1
diff --git a/cpp/.traces/and b/cpp/.traces/and
deleted file mode 100644
index d354b1a9..00000000
--- a/cpp/.traces/and
+++ /dev/null
@@ -1,32 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "1", value: 0, type: 0, properties: ["1": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-parse/0:   product: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-parse/0: instruction: and
-parse/0:   ingredient: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0:   ingredient: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-parse/0:   product: {name: "3", value: 0, type: 1, properties: ["3": "integer"]}
-after-brace/0: recipe main
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: and ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is 1
-mem/0: storing 1 in location 1
-run/0: instruction main/1
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
-mem/0: storing 0 in location 2
-run/0: instruction main/2
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- and/7 {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "2", value: 2, type: 1, properties: ["2": "integer"]}
-run/0: ingredient 0 is 1
-mem/0: location 1 is 1
-run/0: ingredient 1 is 2
-mem/0: location 2 is 0
-run/0: product 0 is 0
-mem/0: storing 0 in location 3
diff --git a/cpp/.traces/array-from-args b/cpp/.traces/array-from-args
deleted file mode 100644
index 695f32cb..00000000
--- a/cpp/.traces/array-from-args
+++ /dev/null
@@ -1,329 +0,0 @@
-parse/0: instruction: run
-parse/0:   ingredient: {name: "
-    1:address:array:location <- init-array 0:literal, 1:literal, 2:literal
-    2:array:location <- copy 1:address:array:location/deref
-  ", value: 0, type: 0, properties: ["
-    1:address:array:location <- init-array 0:literal, 1:literal, 2:literal
-    2:array:location <- copy 1:address:array:location/deref
-  ": "literal-string"]}
-parse/0: instruction: memory-should-contain
-parse/0:   ingredient: {name: "
-    2 <- 3  # array length
-    3 <- 0
-    4 <- 1
-    5 <- 2
-  ", value: 0, type: 0, properties: ["
-    2 <- 3  # array length
-    3 <- 0
-    4 <- 1
-    5 <- 2
-  ": "literal-string"]}
-after-brace/0: recipe array-from-args
-after-brace/0: run ...
-after-brace/0: memory-should-contain ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: array-from-args
-run/0: instruction array-from-args/0
-run/0: run/45 {name: "
-    1:address:array:location <- init-array 0:literal, 1:literal, 2:literal
-    2:array:location <- copy 1:address:array:location/deref
-  ", value: 0, type: 0, properties: ["
-    1:address:array:location <- init-array 0:literal, 1:literal, 2:literal
-    2:array:location <- copy 1:address:array:location/deref
-  ": "literal-string"]}
-parse/0: instruction: init-array
-parse/0:   ingredient: {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-parse/0:   ingredient: {name: "1", value: 0, type: 0, properties: ["1": "literal"]}
-parse/0:   ingredient: {name: "2", value: 0, type: 0, properties: ["2": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 2-5-1, properties: ["1": "address":"array":"location"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "1", value: 0, type: 2-5-1, properties: ["1": "address":"array":"location", "deref": ]}
-parse/0:   product: {name: "2", value: 0, type: 5-1, properties: ["2": "array":"location"]}
-after-brace/0: recipe run1001
-after-brace/0: init-array ...
-after-brace/0: copy ...
-run/0: instruction run1001/0
-run/0: {name: "1", value: 1, type: 2-5-1, properties: ["1": "address":"array":"location"]} <- init-array/114 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}, {name: "2", value: 2, type: 0, properties: ["2": "literal"]}
-run/0: instruction init-array/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1000
-run/0: instruction init-array/1
-run/0: {name: "capacity", value: 1, type: 1, properties: ["capacity": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
-mem/0: storing 0 in location 1002
-run/0: instruction init-array/3
-run/0: {name: "curr-value", value: 2, type: 1, properties: ["curr-value": "location"]}, {name: "exists?", value: 3, type: 3, properties: ["exists?": "boolean"]} <- next-ingredient/30 
-run/0: product 0 is 0
-mem/0: storing 0 in location 1003
-mem/0: storing 1 in location 1004
-run/0: instruction init-array/4
-run/0: break-unless/12 {name: "exists?", value: 3, type: 3, properties: ["exists?": "boolean"]}, {name: "", value: 2, type: , properties: ["": ]}
-mem/0: location 1004 is 1
-run/0: ingredient 0 is 1
-run/0: jump-unless fell through
-run/0: instruction init-array/5
-run/0: {name: "capacity", value: 1, type: 1, properties: ["capacity": "integer"]} <- add/2 {name: "capacity", value: 1, type: 1, properties: ["capacity": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is capacity
-mem/0: location 1002 is 0
-run/0: ingredient 1 is 1
-run/0: product 0 is 1
-mem/0: storing 1 in location 1002
-run/0: instruction init-array/6
-run/0: loop/10 {name: "", value: -4, type: , properties: ["": ]}
-run/0: ingredient 0 is -4
-run/0: jumping to instruction 3
-run/0: instruction init-array/3
-run/0: {name: "curr-value", value: 2, type: 1, properties: ["curr-value": "location"]}, {name: "exists?", value: 3, type: 3, properties: ["exists?": "boolean"]} <- next-ingredient/30 
-run/0: product 0 is 1
-mem/0: storing 1 in location 1003
-mem/0: storing 1 in location 1004
-run/0: instruction init-array/4
-run/0: break-unless/12 {name: "exists?", value: 3, type: 3, properties: ["exists?": "boolean"]}, {name: "", value: 2, type: , properties: ["": ]}
-mem/0: location 1004 is 1
-run/0: ingredient 0 is 1
-run/0: jump-unless fell through
-run/0: instruction init-array/5
-run/0: {name: "capacity", value: 1, type: 1, properties: ["capacity": "integer"]} <- add/2 {name: "capacity", value: 1, type: 1, properties: ["capacity": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is capacity
-mem/0: location 1002 is 1
-run/0: ingredient 1 is 1
-run/0: product 0 is 2
-mem/0: storing 2 in location 1002
-run/0: instruction init-array/6
-run/0: loop/10 {name: "", value: -4, type: , properties: ["": ]}
-run/0: ingredient 0 is -4
-run/0: jumping to instruction 3
-run/0: instruction init-array/3
-run/0: {name: "curr-value", value: 2, type: 1, properties: ["curr-value": "location"]}, {name: "exists?", value: 3, type: 3, properties: ["exists?": "boolean"]} <- next-ingredient/30 
-run/0: product 0 is 2
-mem/0: storing 2 in location 1003
-mem/0: storing 1 in location 1004
-run/0: instruction init-array/4
-run/0: break-unless/12 {name: "exists?", value: 3, type: 3, properties: ["exists?": "boolean"]}, {name: "", value: 2, type: , properties: ["": ]}
-mem/0: location 1004 is 1
-run/0: ingredient 0 is 1
-run/0: jump-unless fell through
-run/0: instruction init-array/5
-run/0: {name: "capacity", value: 1, type: 1, properties: ["capacity": "integer"]} <- add/2 {name: "capacity", value: 1, type: 1, properties: ["capacity": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is capacity
-mem/0: location 1002 is 2
-run/0: ingredient 1 is 1
-run/0: product 0 is 3
-mem/0: storing 3 in location 1002
-run/0: instruction init-array/6
-run/0: loop/10 {name: "", value: -4, type: , properties: ["": ]}
-run/0: ingredient 0 is -4
-run/0: jumping to instruction 3
-run/0: instruction init-array/3
-run/0: {name: "curr-value", value: 2, type: 1, properties: ["curr-value": "location"]}, {name: "exists?", value: 3, type: 3, properties: ["exists?": "boolean"]} <- next-ingredient/30 
-mem/0: storing 0 in location 1004
-run/0: instruction init-array/4
-run/0: break-unless/12 {name: "exists?", value: 3, type: 3, properties: ["exists?": "boolean"]}, {name: "", value: 2, type: , properties: ["": ]}
-mem/0: location 1004 is 0
-run/0: ingredient 0 is 0
-run/0: ingredient 1 is 
-run/0: jumping to instruction 7
-run/0: instruction init-array/8
-run/0: {name: "result", value: 4, type: 2-5-1, properties: ["result": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "capacity", value: 1, type: 1, properties: ["capacity": "integer"]}
-mem/0: location 1002 is 3
-mem/0: array size is 3
-mem/0: new alloc: 1031
-mem/0: storing 1031 in location 1005
-run/0: instruction init-array/9
-run/0: rewind-ingredients/31 
-run/0: instruction init-array/10
-run/0: {name: "i", value: 5, type: 1, properties: ["i": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
-mem/0: storing 0 in location 1006
-run/0: instruction init-array/12
-run/0: {name: "done?", value: 6, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 5, type: 1, properties: ["i": "integer"]}, {name: "capacity", value: 1, type: 1, properties: ["capacity": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1006 is 0
-run/0: ingredient 1 is capacity
-mem/0: location 1002 is 3
-run/0: product 0 is 0
-mem/0: storing 0 in location 1007
-run/0: instruction init-array/13
-run/0: break-if/11 {name: "done?", value: 6, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
-mem/0: location 1007 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction init-array/14
-run/0: {name: "curr-value", value: 2, type: 1, properties: ["curr-value": "location"]}, {name: "exists?", value: 3, type: 3, properties: ["exists?": "boolean"]} <- next-ingredient/30 
-run/0: product 0 is 0
-mem/0: storing 0 in location 1003
-mem/0: storing 1 in location 1004
-run/0: instruction init-array/15
-run/0: assert/19 {name: "exists?", value: 3, type: 3, properties: ["exists?": "boolean"]}, {name: "error in rewinding ingredients to init-array", value: 0, type: 0, properties: ["error in rewinding ingredients to init-array": "literal-string"]}
-run/0: ingredient 0 is exists?
-mem/0: location 1004 is 1
-run/0: instruction init-array/16
-run/0: {name: "tmp", value: 7, type: 2-1, properties: ["tmp": "address":"location"]} <- index-address/27 {name: "result", value: 4, type: 2-5-1, properties: ["result": "address":"array":"location", "deref": ]}, {name: "i", value: 5, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is result
-mem/0: location 1005 is 1031
-run/0: ingredient 1 is {name: "i", value: 5, type: 1, properties: ["i": "integer"]}
-mem/0: location 1006 is 0
-run/0: address to copy is 1032
-run/0: product 0 is 1032
-mem/0: storing 1032 in location 1008
-run/0: instruction init-array/17
-run/0: {name: "tmp", value: 7, type: 2-1, properties: ["tmp": "address":"location", "deref": ]} <- copy/1 {name: "curr-value", value: 2, type: 1, properties: ["curr-value": "location"]}
-run/0: ingredient 0 is curr-value
-mem/0: location 1003 is 0
-mem/0: location 1008 is 1032
-mem/0: storing 0 in location 1032
-run/0: instruction init-array/18
-run/0: {name: "i", value: 5, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 5, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1006 is 0
-run/0: ingredient 1 is 1
-run/0: product 0 is 1
-mem/0: storing 1 in location 1006
-run/0: instruction init-array/19
-run/0: loop/10 {name: "", value: -8, type: , properties: ["": ]}
-run/0: ingredient 0 is -8
-run/0: jumping to instruction 12
-run/0: instruction init-array/12
-run/0: {name: "done?", value: 6, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 5, type: 1, properties: ["i": "integer"]}, {name: "capacity", value: 1, type: 1, properties: ["capacity": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1006 is 1
-run/0: ingredient 1 is capacity
-mem/0: location 1002 is 3
-run/0: product 0 is 0
-mem/0: storing 0 in location 1007
-run/0: instruction init-array/13
-run/0: break-if/11 {name: "done?", value: 6, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
-mem/0: location 1007 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction init-array/14
-run/0: {name: "curr-value", value: 2, type: 1, properties: ["curr-value": "location"]}, {name: "exists?", value: 3, type: 3, properties: ["exists?": "boolean"]} <- next-ingredient/30 
-run/0: product 0 is 1
-mem/0: storing 1 in location 1003
-mem/0: storing 1 in location 1004
-run/0: instruction init-array/15
-run/0: assert/19 {name: "exists?", value: 3, type: 3, properties: ["exists?": "boolean"]}, {name: "error in rewinding ingredients to init-array", value: 0, type: 0, properties: ["error in rewinding ingredients to init-array": "literal-string"]}
-run/0: ingredient 0 is exists?
-mem/0: location 1004 is 1
-run/0: instruction init-array/16
-run/0: {name: "tmp", value: 7, type: 2-1, properties: ["tmp": "address":"location"]} <- index-address/27 {name: "result", value: 4, type: 2-5-1, properties: ["result": "address":"array":"location", "deref": ]}, {name: "i", value: 5, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is result
-mem/0: location 1005 is 1031
-run/0: ingredient 1 is {name: "i", value: 5, type: 1, properties: ["i": "integer"]}
-mem/0: location 1006 is 1
-run/0: address to copy is 1033
-run/0: product 0 is 1033
-mem/0: storing 1033 in location 1008
-run/0: instruction init-array/17
-run/0: {name: "tmp", value: 7, type: 2-1, properties: ["tmp": "address":"location", "deref": ]} <- copy/1 {name: "curr-value", value: 2, type: 1, properties: ["curr-value": "location"]}
-run/0: ingredient 0 is curr-value
-mem/0: location 1003 is 1
-mem/0: location 1008 is 1033
-mem/0: storing 1 in location 1033
-run/0: instruction init-array/18
-run/0: {name: "i", value: 5, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 5, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1006 is 1
-run/0: ingredient 1 is 1
-run/0: product 0 is 2
-mem/0: storing 2 in location 1006
-run/0: instruction init-array/19
-run/0: loop/10 {name: "", value: -8, type: , properties: ["": ]}
-run/0: ingredient 0 is -8
-run/0: jumping to instruction 12
-run/0: instruction init-array/12
-run/0: {name: "done?", value: 6, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 5, type: 1, properties: ["i": "integer"]}, {name: "capacity", value: 1, type: 1, properties: ["capacity": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1006 is 2
-run/0: ingredient 1 is capacity
-mem/0: location 1002 is 3
-run/0: product 0 is 0
-mem/0: storing 0 in location 1007
-run/0: instruction init-array/13
-run/0: break-if/11 {name: "done?", value: 6, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
-mem/0: location 1007 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction init-array/14
-run/0: {name: "curr-value", value: 2, type: 1, properties: ["curr-value": "location"]}, {name: "exists?", value: 3, type: 3, properties: ["exists?": "boolean"]} <- next-ingredient/30 
-run/0: product 0 is 2
-mem/0: storing 2 in location 1003
-mem/0: storing 1 in location 1004
-run/0: instruction init-array/15
-run/0: assert/19 {name: "exists?", value: 3, type: 3, properties: ["exists?": "boolean"]}, {name: "error in rewinding ingredients to init-array", value: 0, type: 0, properties: ["error in rewinding ingredients to init-array": "literal-string"]}
-run/0: ingredient 0 is exists?
-mem/0: location 1004 is 1
-run/0: instruction init-array/16
-run/0: {name: "tmp", value: 7, type: 2-1, properties: ["tmp": "address":"location"]} <- index-address/27 {name: "result", value: 4, type: 2-5-1, properties: ["result": "address":"array":"location", "deref": ]}, {name: "i", value: 5, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is result
-mem/0: location 1005 is 1031
-run/0: ingredient 1 is {name: "i", value: 5, type: 1, properties: ["i": "integer"]}
-mem/0: location 1006 is 2
-run/0: address to copy is 1034
-run/0: product 0 is 1034
-mem/0: storing 1034 in location 1008
-run/0: instruction init-array/17
-run/0: {name: "tmp", value: 7, type: 2-1, properties: ["tmp": "address":"location", "deref": ]} <- copy/1 {name: "curr-value", value: 2, type: 1, properties: ["curr-value": "location"]}
-run/0: ingredient 0 is curr-value
-mem/0: location 1003 is 2
-mem/0: location 1008 is 1034
-mem/0: storing 2 in location 1034
-run/0: instruction init-array/18
-run/0: {name: "i", value: 5, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 5, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1006 is 2
-run/0: ingredient 1 is 1
-run/0: product 0 is 3
-mem/0: storing 3 in location 1006
-run/0: instruction init-array/19
-run/0: loop/10 {name: "", value: -8, type: , properties: ["": ]}
-run/0: ingredient 0 is -8
-run/0: jumping to instruction 12
-run/0: instruction init-array/12
-run/0: {name: "done?", value: 6, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 5, type: 1, properties: ["i": "integer"]}, {name: "capacity", value: 1, type: 1, properties: ["capacity": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1006 is 3
-run/0: ingredient 1 is capacity
-mem/0: location 1002 is 3
-run/0: product 0 is 1
-mem/0: storing 1 in location 1007
-run/0: instruction init-array/13
-run/0: break-if/11 {name: "done?", value: 6, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
-mem/0: location 1007 is 1
-run/0: ingredient 0 is 1
-run/0: ingredient 1 is 
-run/0: jumping to instruction 20
-run/0: instruction init-array/21
-run/0: reply/33 {name: "result", value: 4, type: 2-5-1, properties: ["result": "address":"array":"location"]}
-mem/0: location 1005 is 1031
-run/0: result 0 is 1031
-mem/0: storing 1031 in location 1
-run/0: instruction run1001/1
-run/0: {name: "2", value: 2, type: 5-1, properties: ["2": "array":"location"]} <- copy/1 {name: "1", value: 1, type: 2-5-1, properties: ["1": "address":"array":"location", "deref": ]}
-run/0: ingredient 0 is 1
-mem/0: location 1 is 1031
-mem/0: location 1031 is 3
-mem/0: location 1032 is 0
-mem/0: location 1033 is 1
-mem/0: location 1034 is 2
-mem/0: storing 3 in location 2
-mem/0: storing 0 in location 3
-mem/0: storing 1 in location 4
-mem/0: storing 2 in location 5
-run/0: instruction array-from-args/1
-run/0: memory-should-contain/46 {name: "
-    2 <- 3  # array length
-    3 <- 0
-    4 <- 1
-    5 <- 2
-  ", value: 0, type: 0, properties: ["
-    2 <- 3  # array length
-    3 <- 0
-    4 <- 1
-    5 <- 2
-  ": "literal-string"]}
-run/0: checking location 2
-run/0: checking location 3
-run/0: checking location 4
-run/0: checking location 5
diff --git a/cpp/.traces/array_length b/cpp/.traces/array_length
deleted file mode 100644
index 514e67b5..00000000
--- a/cpp/.traces/array_length
+++ /dev/null
@@ -1,42 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "3", value: 0, type: 0, properties: ["3": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "14", value: 0, type: 0, properties: ["14": "literal"]}
-parse/0:   product: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "15", value: 0, type: 0, properties: ["15": "literal"]}
-parse/0:   product: {name: "3", value: 0, type: 1, properties: ["3": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "16", value: 0, type: 0, properties: ["16": "literal"]}
-parse/0:   product: {name: "4", value: 0, type: 1, properties: ["4": "integer"]}
-parse/0: instruction: length
-parse/0:   ingredient: {name: "1", value: 0, type: 5-1, properties: ["1": "array":"integer"]}
-parse/0:   product: {name: "5", value: 0, type: 1, properties: ["5": "integer"]}
-after-brace/0: recipe main
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: length ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "3", value: 3, type: 0, properties: ["3": "literal"]}
-run/0: ingredient 0 is 3
-mem/0: storing 3 in location 1
-run/0: instruction main/1
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "14", value: 14, type: 0, properties: ["14": "literal"]}
-run/0: ingredient 0 is 14
-mem/0: storing 14 in location 2
-run/0: instruction main/2
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- copy/1 {name: "15", value: 15, type: 0, properties: ["15": "literal"]}
-run/0: ingredient 0 is 15
-mem/0: storing 15 in location 3
-run/0: instruction main/3
-run/0: {name: "4", value: 4, type: 1, properties: ["4": "integer"]} <- copy/1 {name: "16", value: 16, type: 0, properties: ["16": "literal"]}
-run/0: ingredient 0 is 16
-mem/0: storing 16 in location 4
-run/0: instruction main/4
-run/0: {name: "5", value: 5, type: 1, properties: ["5": "integer"]} <- length/28 {name: "1", value: 1, type: 5-1, properties: ["1": "array":"integer"]}
-mem/0: storing 3 in location 5
diff --git a/cpp/.traces/assert b/cpp/.traces/assert
deleted file mode 100644
index 74ca6ecf..00000000
--- a/cpp/.traces/assert
+++ /dev/null
@@ -1,11 +0,0 @@
-parse/0: instruction: assert
-parse/0:   ingredient: {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-parse/0:   ingredient: {name: "this is an assert in mu", value: 0, type: 0, properties: ["this is an assert in mu": "literal-string"]}
-after-brace/0: recipe main
-after-brace/0: assert ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: assert/19 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}, {name: "this is an assert in mu", value: 0, type: 0, properties: ["this is an assert in mu": "literal-string"]}
-run/0: ingredient 0 is 0
-warn/0: this is an assert in mu
diff --git a/cpp/.traces/brace_conversion b/cpp/.traces/brace_conversion
deleted file mode 100644
index 99c3b723..00000000
--- a/cpp/.traces/brace_conversion
+++ /dev/null
@@ -1,11 +0,0 @@
-parse/0: label: {
-parse/0: instruction: break
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0: label: }
-brace/0: 1000: push (open, 0)
-brace/0: push (close, 3)
-after-brace/0: recipe main
-after-brace/0: jump 1:offset
-after-brace/0: copy ...
diff --git a/cpp/.traces/brace_conversion_and_run b/cpp/.traces/brace_conversion_and_run
deleted file mode 100644
index 172de7f0..00000000
--- a/cpp/.traces/brace_conversion_and_run
+++ /dev/null
@@ -1,195 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "5", value: 0, type: 0, properties: ["5": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "1", value: 0, type: 0, properties: ["1": "literal"]}
-parse/0:   product: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-parse/0: label: {
-parse/0: instruction: equal
-parse/0:   ingredient: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0:   ingredient: {name: "1", value: 0, type: 0, properties: ["1": "literal"]}
-parse/0:   product: {name: "3", value: 0, type: 3, properties: ["3": "boolean"]}
-parse/0: instruction: break-if
-parse/0:   ingredient: {name: "3", value: 0, type: 3, properties: ["3": "boolean"]}
-parse/0: instruction: multiply
-parse/0:   ingredient: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-parse/0:   ingredient: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0:   product: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-parse/0: instruction: subtract
-parse/0:   ingredient: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0:   ingredient: {name: "1", value: 0, type: 0, properties: ["1": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0: instruction: loop
-parse/0: label: }
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-parse/0:   product: {name: "4", value: 0, type: 1, properties: ["4": "integer"]}
-brace/0: 1000: push (open, 2)
-brace/0: push (close, 8)
-after-brace/0: recipe test-factorial
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: equal ...
-after-brace/0: jump-if 3, 3:offset
-after-brace/0: multiply ...
-after-brace/0: subtract ...
-after-brace/0: jump -5:offset
-after-brace/0: 7: {name: "", value: -5, type: , properties: ["": ]}
-after-brace/0: 7: {name: "", value: -5, type: , properties: ["": ]}
-after-brace/0: copy ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: test-factorial
-run/0: instruction test-factorial/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "5", value: 5, type: 0, properties: ["5": "literal"]}
-run/0: ingredient 0 is 5
-mem/0: storing 5 in location 1
-run/0: instruction test-factorial/1
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is 1
-mem/0: storing 1 in location 2
-run/0: instruction test-factorial/3
-run/0: {name: "3", value: 3, type: 3, properties: ["3": "boolean"]} <- equal/13 {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is 1
-mem/0: location 1 is 5
-run/0: ingredient 1 is 1
-run/0: product 0 is 0
-mem/0: storing 0 in location 3
-run/0: instruction test-factorial/4
-run/0: break-if/11 {name: "3", value: 3, type: 3, properties: ["3": "boolean"]}, {name: "", value: 3, type: , properties: ["": ]}
-mem/0: location 3 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction test-factorial/5
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- multiply/4 {name: "2", value: 2, type: 1, properties: ["2": "integer"]}, {name: "1", value: 1, type: 1, properties: ["1": "integer"]}
-run/0: ingredient 0 is 2
-mem/0: location 2 is 1
-run/0: ingredient 1 is 1
-mem/0: location 1 is 5
-run/0: ingredient 1 is 5
-run/0: product 0 is 5
-mem/0: storing 5 in location 2
-run/0: instruction test-factorial/6
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- subtract/3 {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is 1
-mem/0: location 1 is 5
-run/0: ingredient 1 is 1
-run/0: product 0 is 4
-mem/0: storing 4 in location 1
-run/0: instruction test-factorial/7
-run/0: loop/10 {name: "", value: -5, type: , properties: ["": ]}
-run/0: ingredient 0 is -5
-run/0: jumping to instruction 3
-run/0: instruction test-factorial/3
-run/0: {name: "3", value: 3, type: 3, properties: ["3": "boolean"]} <- equal/13 {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is 1
-mem/0: location 1 is 4
-run/0: ingredient 1 is 1
-run/0: product 0 is 0
-mem/0: storing 0 in location 3
-run/0: instruction test-factorial/4
-run/0: break-if/11 {name: "3", value: 3, type: 3, properties: ["3": "boolean"]}, {name: "", value: 3, type: , properties: ["": ]}
-mem/0: location 3 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction test-factorial/5
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- multiply/4 {name: "2", value: 2, type: 1, properties: ["2": "integer"]}, {name: "1", value: 1, type: 1, properties: ["1": "integer"]}
-run/0: ingredient 0 is 2
-mem/0: location 2 is 5
-run/0: ingredient 1 is 1
-mem/0: location 1 is 4
-run/0: ingredient 1 is 4
-run/0: product 0 is 20
-mem/0: storing 20 in location 2
-run/0: instruction test-factorial/6
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- subtract/3 {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is 1
-mem/0: location 1 is 4
-run/0: ingredient 1 is 1
-run/0: product 0 is 3
-mem/0: storing 3 in location 1
-run/0: instruction test-factorial/7
-run/0: loop/10 {name: "", value: -5, type: , properties: ["": ]}
-run/0: ingredient 0 is -5
-run/0: jumping to instruction 3
-run/0: instruction test-factorial/3
-run/0: {name: "3", value: 3, type: 3, properties: ["3": "boolean"]} <- equal/13 {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is 1
-mem/0: location 1 is 3
-run/0: ingredient 1 is 1
-run/0: product 0 is 0
-mem/0: storing 0 in location 3
-run/0: instruction test-factorial/4
-run/0: break-if/11 {name: "3", value: 3, type: 3, properties: ["3": "boolean"]}, {name: "", value: 3, type: , properties: ["": ]}
-mem/0: location 3 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction test-factorial/5
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- multiply/4 {name: "2", value: 2, type: 1, properties: ["2": "integer"]}, {name: "1", value: 1, type: 1, properties: ["1": "integer"]}
-run/0: ingredient 0 is 2
-mem/0: location 2 is 20
-run/0: ingredient 1 is 1
-mem/0: location 1 is 3
-run/0: ingredient 1 is 3
-run/0: product 0 is 60
-mem/0: storing 60 in location 2
-run/0: instruction test-factorial/6
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- subtract/3 {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is 1
-mem/0: location 1 is 3
-run/0: ingredient 1 is 1
-run/0: product 0 is 2
-mem/0: storing 2 in location 1
-run/0: instruction test-factorial/7
-run/0: loop/10 {name: "", value: -5, type: , properties: ["": ]}
-run/0: ingredient 0 is -5
-run/0: jumping to instruction 3
-run/0: instruction test-factorial/3
-run/0: {name: "3", value: 3, type: 3, properties: ["3": "boolean"]} <- equal/13 {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is 1
-mem/0: location 1 is 2
-run/0: ingredient 1 is 1
-run/0: product 0 is 0
-mem/0: storing 0 in location 3
-run/0: instruction test-factorial/4
-run/0: break-if/11 {name: "3", value: 3, type: 3, properties: ["3": "boolean"]}, {name: "", value: 3, type: , properties: ["": ]}
-mem/0: location 3 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction test-factorial/5
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- multiply/4 {name: "2", value: 2, type: 1, properties: ["2": "integer"]}, {name: "1", value: 1, type: 1, properties: ["1": "integer"]}
-run/0: ingredient 0 is 2
-mem/0: location 2 is 60
-run/0: ingredient 1 is 1
-mem/0: location 1 is 2
-run/0: ingredient 1 is 2
-run/0: product 0 is 120
-mem/0: storing 120 in location 2
-run/0: instruction test-factorial/6
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- subtract/3 {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is 1
-mem/0: location 1 is 2
-run/0: ingredient 1 is 1
-run/0: product 0 is 1
-mem/0: storing 1 in location 1
-run/0: instruction test-factorial/7
-run/0: loop/10 {name: "", value: -5, type: , properties: ["": ]}
-run/0: ingredient 0 is -5
-run/0: jumping to instruction 3
-run/0: instruction test-factorial/3
-run/0: {name: "3", value: 3, type: 3, properties: ["3": "boolean"]} <- equal/13 {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is 1
-mem/0: location 1 is 1
-run/0: ingredient 1 is 1
-run/0: product 0 is 1
-mem/0: storing 1 in location 3
-run/0: instruction test-factorial/4
-run/0: break-if/11 {name: "3", value: 3, type: 3, properties: ["3": "boolean"]}, {name: "", value: 3, type: , properties: ["": ]}
-mem/0: location 3 is 1
-run/0: ingredient 0 is 1
-run/0: ingredient 1 is 
-run/0: jumping to instruction 8
-run/0: instruction test-factorial/9
-run/0: {name: "4", value: 4, type: 1, properties: ["4": "integer"]} <- copy/1 {name: "2", value: 2, type: 1, properties: ["2": "integer"]}
-run/0: ingredient 0 is 2
-mem/0: location 2 is 120
-mem/0: storing 120 in location 4
diff --git a/cpp/.traces/break_cascading b/cpp/.traces/break_cascading
deleted file mode 100644
index c9c2dedd..00000000
--- a/cpp/.traces/break_cascading
+++ /dev/null
@@ -1,17 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0: label: {
-parse/0: instruction: break
-parse/0: label: }
-parse/0: label: {
-parse/0: instruction: break
-parse/0: label: }
-brace/0: 1000: push (open, 1)
-brace/0: push (close, 3)
-brace/0: 1000: push (open, 4)
-brace/0: push (close, 6)
-after-brace/0: recipe main
-after-brace/0: copy ...
-after-brace/0: jump 0:offset
-after-brace/0: jump 0:offset
diff --git a/cpp/.traces/break_cascading2 b/cpp/.traces/break_cascading2
deleted file mode 100644
index 636bf3d4..00000000
--- a/cpp/.traces/break_cascading2
+++ /dev/null
@@ -1,25 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-parse/0:   product: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-parse/0: label: {
-parse/0: instruction: break
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-parse/0:   product: {name: "3", value: 0, type: 1, properties: ["3": "integer"]}
-parse/0: label: }
-parse/0: label: {
-parse/0: instruction: break
-parse/0: label: }
-brace/0: 1000: push (open, 2)
-brace/0: push (close, 5)
-brace/0: 1000: push (open, 6)
-brace/0: push (close, 8)
-after-brace/0: recipe main
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: jump 1:offset
-after-brace/0: copy ...
-after-brace/0: jump 0:offset
diff --git a/cpp/.traces/break_empty_block b/cpp/.traces/break_empty_block
deleted file mode 100644
index f31738bb..00000000
--- a/cpp/.traces/break_empty_block
+++ /dev/null
@@ -1,11 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0: label: {
-parse/0: instruction: break
-parse/0: label: }
-brace/0: 1000: push (open, 1)
-brace/0: push (close, 3)
-after-brace/0: recipe main
-after-brace/0: copy ...
-after-brace/0: jump 0:offset
diff --git a/cpp/.traces/break_if b/cpp/.traces/break_if
deleted file mode 100644
index 109f95f4..00000000
--- a/cpp/.traces/break_if
+++ /dev/null
@@ -1,26 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-parse/0:   product: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-parse/0: label: {
-parse/0: instruction: break-if
-parse/0:   ingredient: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-parse/0:   product: {name: "3", value: 0, type: 1, properties: ["3": "integer"]}
-parse/0: label: }
-parse/0: label: {
-parse/0: instruction: break
-parse/0: label: }
-brace/0: 1000: push (open, 2)
-brace/0: push (close, 5)
-brace/0: 1000: push (open, 6)
-brace/0: push (close, 8)
-after-brace/0: recipe main
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: jump-if 2, 1:offset
-after-brace/0: copy ...
-after-brace/0: jump 0:offset
diff --git a/cpp/.traces/break_label b/cpp/.traces/break_label
deleted file mode 100644
index 5dc39132..00000000
--- a/cpp/.traces/break_label
+++ /dev/null
@@ -1,12 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0: label: {
-parse/0: instruction: break
-parse/0:   ingredient: {name: "+foo", value: 0, type: 0, properties: ["+foo": "offset"]}
-parse/0: label: }
-brace/0: 1000: push (open, 1)
-brace/0: push (close, 3)
-after-brace/0: recipe main
-after-brace/0: copy ...
-after-brace/0: jump +foo:offset
diff --git a/cpp/.traces/break_nested b/cpp/.traces/break_nested
deleted file mode 100644
index 088b4742..00000000
--- a/cpp/.traces/break_nested
+++ /dev/null
@@ -1,27 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0: label: {
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-parse/0:   product: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-parse/0: instruction: break
-parse/0: label: {
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-parse/0:   product: {name: "3", value: 0, type: 1, properties: ["3": "integer"]}
-parse/0: label: }
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-parse/0:   product: {name: "4", value: 0, type: 1, properties: ["4": "integer"]}
-parse/0: label: }
-brace/0: 1000: push (open, 1)
-brace/0: 1000: push (open, 4)
-brace/0: push (close, 6)
-brace/0: push (close, 8)
-after-brace/0: recipe main
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: jump 4:offset
-after-brace/0: copy ...
-after-brace/0: copy ...
diff --git a/cpp/.traces/break_nested_degenerate b/cpp/.traces/break_nested_degenerate
deleted file mode 100644
index 649afcdb..00000000
--- a/cpp/.traces/break_nested_degenerate
+++ /dev/null
@@ -1,23 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0: label: {
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-parse/0:   product: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-parse/0: instruction: break
-parse/0: label: {
-parse/0: label: }
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-parse/0:   product: {name: "4", value: 0, type: 1, properties: ["4": "integer"]}
-parse/0: label: }
-brace/0: 1000: push (open, 1)
-brace/0: 1000: push (open, 4)
-brace/0: push (close, 5)
-brace/0: push (close, 7)
-after-brace/0: recipe main
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: jump 3:offset
-after-brace/0: copy ...
diff --git a/cpp/.traces/break_nested_degenerate2 b/cpp/.traces/break_nested_degenerate2
deleted file mode 100644
index 46a5d360..00000000
--- a/cpp/.traces/break_nested_degenerate2
+++ /dev/null
@@ -1,19 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0: label: {
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-parse/0:   product: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-parse/0: instruction: break
-parse/0: label: {
-parse/0: label: }
-parse/0: label: }
-brace/0: 1000: push (open, 1)
-brace/0: 1000: push (open, 4)
-brace/0: push (close, 5)
-brace/0: push (close, 6)
-after-brace/0: recipe main
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: jump 2:offset
diff --git a/cpp/.traces/break_unless b/cpp/.traces/break_unless
deleted file mode 100644
index 059b99ca..00000000
--- a/cpp/.traces/break_unless
+++ /dev/null
@@ -1,20 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-parse/0:   product: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-parse/0: label: {
-parse/0: instruction: break-unless
-parse/0:   ingredient: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-parse/0:   product: {name: "3", value: 0, type: 1, properties: ["3": "integer"]}
-parse/0: label: }
-brace/0: 1000: push (open, 2)
-brace/0: push (close, 5)
-after-brace/0: recipe main
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: jump-unless 2, 1:offset
-after-brace/0: copy ...
diff --git a/cpp/.traces/buffer-append-works b/cpp/.traces/buffer-append-works
deleted file mode 100644
index e60333a7..00000000
--- a/cpp/.traces/buffer-append-works
+++ /dev/null
@@ -1,1146 +0,0 @@
-parse/0: instruction: run
-parse/0:   ingredient: {name: "
-    default-space:address:array:location <- new location:type, 30:literal
-    x:address:buffer <- init-buffer 3:literal
-    s1:address:array:character <- get x:address:buffer/deref, data:offset
-    x:address:buffer <- buffer-append x:address:buffer, 97:literal  # 'a'
-    x:address:buffer <- buffer-append x:address:buffer, 98:literal  # 'b'
-    x:address:buffer <- buffer-append x:address:buffer, 99:literal  # 'c'
-    s2:address:array:character <- get x:address:buffer/deref, data:offset
-    1:boolean/raw <- equal s1:address:array:character, s2:address:array:character
-#?     $print s2:address:array:character
-#?     $print [
-#? ]
-#?     $print 1060:integer/raw
-#?     $print [
-#? ]
-#?     $print 1061:integer/raw
-#?     $print [
-#? ]
-#?     $print 1062:integer/raw
-#?     $print [
-#? ]
-#?     $print 1063:integer/raw
-#?     $print [
-#? ]
-#?     $print 1064:integer/raw
-#?     $print [
-#? ]
-#?     $print 1065:integer/raw
-#?     $print [
-#? ]
-    2:array:character/raw <- copy s2:address:array:character/deref
-    +buffer-filled
-    x:address:buffer <- buffer-append x:address:buffer, 100:literal  # 'd'
-    s3:address:array:character <- get x:address:buffer/deref, data:offset
-    10:boolean/raw <- equal s1:address:array:character, s3:address:array:character
-    11:integer/raw <- get x:address:buffer/deref, length:offset
-    12:array:character/raw <- copy s3:address:array:character/deref
-  ", value: 0, type: 0, properties: ["
-    default-space:address:array:location <- new location:type, 30:literal
-    x:address:buffer <- init-buffer 3:literal
-    s1:address:array:character <- get x:address:buffer/deref, data:offset
-    x:address:buffer <- buffer-append x:address:buffer, 97:literal  # 'a'
-    x:address:buffer <- buffer-append x:address:buffer, 98:literal  # 'b'
-    x:address:buffer <- buffer-append x:address:buffer, 99:literal  # 'c'
-    s2:address:array:character <- get x:address:buffer/deref, data:offset
-    1:boolean/raw <- equal s1:address:array:character, s2:address:array:character
-#?     $print s2:address:array:character
-#?     $print [
-#? ]
-#?     $print 1060:integer/raw
-#?     $print [
-#? ]
-#?     $print 1061:integer/raw
-#?     $print [
-#? ]
-#?     $print 1062:integer/raw
-#?     $print [
-#? ]
-#?     $print 1063:integer/raw
-#?     $print [
-#? ]
-#?     $print 1064:integer/raw
-#?     $print [
-#? ]
-#?     $print 1065:integer/raw
-#?     $print [
-#? ]
-    2:array:character/raw <- copy s2:address:array:character/deref
-    +buffer-filled
-    x:address:buffer <- buffer-append x:address:buffer, 100:literal  # 'd'
-    s3:address:array:character <- get x:address:buffer/deref, data:offset
-    10:boolean/raw <- equal s1:address:array:character, s3:address:array:character
-    11:integer/raw <- get x:address:buffer/deref, length:offset
-    12:array:character/raw <- copy s3:address:array:character/deref
-  ": "literal-string"]}
-parse/0: instruction: memory-should-contain
-parse/0:   ingredient: {name: "
-    # before +buffer-filled
-    1 <- 1   # no change in data pointer
-    2 <- 3   # size of data
-    3 <- 97  # data
-    4 <- 98
-    5 <- 99
-    # in the end
-    10 <- 0   # data pointer has grown
-    11 <- 4   # final length
-    12 <- 6   # but data's capacity has doubled
-    13 <- 97  # data
-    14 <- 98
-    15 <- 99
-    16 <- 100
-    17 <- 0
-    18 <- 0
-  ", value: 0, type: 0, properties: ["
-    # before +buffer-filled
-    1 <- 1   # no change in data pointer
-    2 <- 3   # size of data
-    3 <- 97  # data
-    4 <- 98
-    5 <- 99
-    # in the end
-    10 <- 0   # data pointer has grown
-    11 <- 4   # final length
-    12 <- 6   # but data's capacity has doubled
-    13 <- 97  # data
-    14 <- 98
-    15 <- 99
-    16 <- 100
-    17 <- 0
-    18 <- 0
-  ": "literal-string"]}
-after-brace/0: recipe buffer-append-works
-after-brace/0: run ...
-after-brace/0: memory-should-contain ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: buffer-append-works
-run/0: instruction buffer-append-works/0
-run/0: run/45 {name: "
-    default-space:address:array:location <- new location:type, 30:literal
-    x:address:buffer <- init-buffer 3:literal
-    s1:address:array:character <- get x:address:buffer/deref, data:offset
-    x:address:buffer <- buffer-append x:address:buffer, 97:literal  # 'a'
-    x:address:buffer <- buffer-append x:address:buffer, 98:literal  # 'b'
-    x:address:buffer <- buffer-append x:address:buffer, 99:literal  # 'c'
-    s2:address:array:character <- get x:address:buffer/deref, data:offset
-    1:boolean/raw <- equal s1:address:array:character, s2:address:array:character
-#?     $print s2:address:array:character
-#?     $print [
-#? ]
-#?     $print 1060:integer/raw
-#?     $print [
-#? ]
-#?     $print 1061:integer/raw
-#?     $print [
-#? ]
-#?     $print 1062:integer/raw
-#?     $print [
-#? ]
-#?     $print 1063:integer/raw
-#?     $print [
-#? ]
-#?     $print 1064:integer/raw
-#?     $print [
-#? ]
-#?     $print 1065:integer/raw
-#?     $print [
-#? ]
-    2:array:character/raw <- copy s2:address:array:character/deref
-    +buffer-filled
-    x:address:buffer <- buffer-append x:address:buffer, 100:literal  # 'd'
-    s3:address:array:character <- get x:address:buffer/deref, data:offset
-    10:boolean/raw <- equal s1:address:array:character, s3:address:array:character
-    11:integer/raw <- get x:address:buffer/deref, length:offset
-    12:array:character/raw <- copy s3:address:array:character/deref
-  ", value: 0, type: 0, properties: ["
-    default-space:address:array:location <- new location:type, 30:literal
-    x:address:buffer <- init-buffer 3:literal
-    s1:address:array:character <- get x:address:buffer/deref, data:offset
-    x:address:buffer <- buffer-append x:address:buffer, 97:literal  # 'a'
-    x:address:buffer <- buffer-append x:address:buffer, 98:literal  # 'b'
-    x:address:buffer <- buffer-append x:address:buffer, 99:literal  # 'c'
-    s2:address:array:character <- get x:address:buffer/deref, data:offset
-    1:boolean/raw <- equal s1:address:array:character, s2:address:array:character
-#?     $print s2:address:array:character
-#?     $print [
-#? ]
-#?     $print 1060:integer/raw
-#?     $print [
-#? ]
-#?     $print 1061:integer/raw
-#?     $print [
-#? ]
-#?     $print 1062:integer/raw
-#?     $print [
-#? ]
-#?     $print 1063:integer/raw
-#?     $print [
-#? ]
-#?     $print 1064:integer/raw
-#?     $print [
-#? ]
-#?     $print 1065:integer/raw
-#?     $print [
-#? ]
-    2:array:character/raw <- copy s2:address:array:character/deref
-    +buffer-filled
-    x:address:buffer <- buffer-append x:address:buffer, 100:literal  # 'd'
-    s3:address:array:character <- get x:address:buffer/deref, data:offset
-    10:boolean/raw <- equal s1:address:array:character, s3:address:array:character
-    11:integer/raw <- get x:address:buffer/deref, length:offset
-    12:array:character/raw <- copy s3:address:array:character/deref
-  ": "literal-string"]}
-parse/0: instruction: new
-parse/0:   ingredient: {name: "location", value: 0, type: 0, properties: ["location": "type"]}
-parse/0:   ingredient: {name: "30", value: 0, type: 0, properties: ["30": "literal"]}
-parse/0:   product: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]}
-parse/0: instruction: init-buffer
-parse/0:   ingredient: {name: "3", value: 0, type: 0, properties: ["3": "literal"]}
-parse/0:   product: {name: "x", value: 0, type: 2-9, properties: ["x": "address":"buffer"]}
-parse/0: instruction: get
-parse/0:   ingredient: {name: "x", value: 0, type: 2-9, properties: ["x": "address":"buffer", "deref": ]}
-parse/0:   ingredient: {name: "data", value: 0, type: 0, properties: ["data": "offset"]}
-parse/0:   product: {name: "s1", value: 0, type: 2-5-4, properties: ["s1": "address":"array":"character"]}
-parse/0: instruction: buffer-append
-parse/0:   ingredient: {name: "x", value: 0, type: 2-9, properties: ["x": "address":"buffer"]}
-parse/0:   ingredient: {name: "97", value: 0, type: 0, properties: ["97": "literal"]}
-parse/0:   product: {name: "x", value: 0, type: 2-9, properties: ["x": "address":"buffer"]}
-parse/0: instruction: buffer-append
-parse/0:   ingredient: {name: "x", value: 0, type: 2-9, properties: ["x": "address":"buffer"]}
-parse/0:   ingredient: {name: "98", value: 0, type: 0, properties: ["98": "literal"]}
-parse/0:   product: {name: "x", value: 0, type: 2-9, properties: ["x": "address":"buffer"]}
-parse/0: instruction: buffer-append
-parse/0:   ingredient: {name: "x", value: 0, type: 2-9, properties: ["x": "address":"buffer"]}
-parse/0:   ingredient: {name: "99", value: 0, type: 0, properties: ["99": "literal"]}
-parse/0:   product: {name: "x", value: 0, type: 2-9, properties: ["x": "address":"buffer"]}
-parse/0: instruction: get
-parse/0:   ingredient: {name: "x", value: 0, type: 2-9, properties: ["x": "address":"buffer", "deref": ]}
-parse/0:   ingredient: {name: "data", value: 0, type: 0, properties: ["data": "offset"]}
-parse/0:   product: {name: "s2", value: 0, type: 2-5-4, properties: ["s2": "address":"array":"character"]}
-parse/0: instruction: equal
-parse/0:   ingredient: {name: "s1", value: 0, type: 2-5-4, properties: ["s1": "address":"array":"character"]}
-parse/0:   ingredient: {name: "s2", value: 0, type: 2-5-4, properties: ["s2": "address":"array":"character"]}
-parse/0:   product: {name: "1", value: 0, type: 3, properties: ["1": "boolean", "raw": ]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "s2", value: 0, type: 2-5-4, properties: ["s2": "address":"array":"character", "deref": ]}
-parse/0:   product: {name: "2", value: 0, type: 5-4, properties: ["2": "array":"character", "raw": ]}
-parse/0: label: +buffer-filled
-parse/0: instruction: buffer-append
-parse/0:   ingredient: {name: "x", value: 0, type: 2-9, properties: ["x": "address":"buffer"]}
-parse/0:   ingredient: {name: "100", value: 0, type: 0, properties: ["100": "literal"]}
-parse/0:   product: {name: "x", value: 0, type: 2-9, properties: ["x": "address":"buffer"]}
-parse/0: instruction: get
-parse/0:   ingredient: {name: "x", value: 0, type: 2-9, properties: ["x": "address":"buffer", "deref": ]}
-parse/0:   ingredient: {name: "data", value: 0, type: 0, properties: ["data": "offset"]}
-parse/0:   product: {name: "s3", value: 0, type: 2-5-4, properties: ["s3": "address":"array":"character"]}
-parse/0: instruction: equal
-parse/0:   ingredient: {name: "s1", value: 0, type: 2-5-4, properties: ["s1": "address":"array":"character"]}
-parse/0:   ingredient: {name: "s3", value: 0, type: 2-5-4, properties: ["s3": "address":"array":"character"]}
-parse/0:   product: {name: "10", value: 0, type: 3, properties: ["10": "boolean", "raw": ]}
-parse/0: instruction: get
-parse/0:   ingredient: {name: "x", value: 0, type: 2-9, properties: ["x": "address":"buffer", "deref": ]}
-parse/0:   ingredient: {name: "length", value: 0, type: 0, properties: ["length": "offset"]}
-parse/0:   product: {name: "11", value: 0, type: 1, properties: ["11": "integer", "raw": ]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "s3", value: 0, type: 2-5-4, properties: ["s3": "address":"array":"character", "deref": ]}
-parse/0:   product: {name: "12", value: 0, type: 5-4, properties: ["12": "array":"character", "raw": ]}
-new/0: location -> 1
-name/0: assign x 1
-name/0: element data of type buffer is at offset 1
-name/0: assign s1 2
-name/0: element data of type buffer is at offset 1
-name/0: assign s2 3
-name/0: element data of type buffer is at offset 1
-name/0: assign s3 4
-name/0: element length of type buffer is at offset 0
-after-brace/0: recipe run1001
-after-brace/0: new ...
-after-brace/0: init-buffer ...
-after-brace/0: get ...
-after-brace/0: buffer-append ...
-after-brace/0: buffer-append ...
-after-brace/0: buffer-append ...
-after-brace/0: get ...
-after-brace/0: equal ...
-after-brace/0: copy ...
-after-brace/0: buffer-append ...
-after-brace/0: get ...
-after-brace/0: equal ...
-after-brace/0: get ...
-after-brace/0: copy ...
-run/0: instruction run1001/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1000
-run/0: instruction run1001/1
-run/0: {name: "x", value: 1, type: 2-9, properties: ["x": "address":"buffer"]} <- init-buffer/101 {name: "3", value: 3, type: 0, properties: ["3": "literal"]}
-run/0: instruction init-buffer/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1031
-run/0: instruction init-buffer/1
-run/0: {name: "result", value: 1, type: 2-9, properties: ["result": "address":"buffer"]} <- new/44 {name: "buffer", value: 9, type: 0, properties: ["buffer": "type"]}
-mem/0: new alloc: 1062
-mem/0: storing 1062 in location 1033
-run/0: instruction init-buffer/2
-run/0: {name: "len", value: 2, type: 2-1, properties: ["len": "address":"integer"]} <- get-address/25 {name: "result", value: 1, type: 2-9, properties: ["result": "address":"buffer", "deref": ]}, {name: "length", value: 0, type: 0, properties: ["length": "offset"]}
-run/0: ingredient 0 is result
-mem/0: location 1033 is 1062
-run/0: ingredient 1 is length
-run/0: address to copy is 1062
-run/0: product 0 is 1062
-mem/0: storing 1062 in location 1034
-run/0: instruction init-buffer/3
-run/0: {name: "len", value: 2, type: 2-1, properties: ["len": "address":"integer", "deref": ]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
-mem/0: location 1034 is 1062
-mem/0: storing 0 in location 1062
-run/0: instruction init-buffer/4
-run/0: {name: "s", value: 3, type: 2-2-5-4, properties: ["s": "address":"address":"array":"character"]} <- get-address/25 {name: "result", value: 1, type: 2-9, properties: ["result": "address":"buffer", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is result
-mem/0: location 1033 is 1062
-run/0: ingredient 1 is data
-run/0: address to copy is 1063
-run/0: product 0 is 1063
-mem/0: storing 1063 in location 1035
-run/0: instruction init-buffer/5
-run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- next-ingredient/30 
-run/0: product 0 is 3
-mem/0: storing 3 in location 1036
-run/0: instruction init-buffer/6
-run/0: {name: "s", value: 3, type: 2-2-5-4, properties: ["s": "address":"address":"array":"character", "deref": ]} <- new/44 {name: "character", value: 4, type: 0, properties: ["character": "type"]}, {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}
-mem/0: location 1036 is 3
-mem/0: array size is 3
-mem/0: new alloc: 1064
-mem/0: location 1035 is 1063
-mem/0: storing 1064 in location 1063
-run/0: instruction init-buffer/7
-run/0: reply/33 {name: "result", value: 1, type: 2-9, properties: ["result": "address":"buffer"]}
-mem/0: location 1033 is 1062
-run/0: result 0 is 1062
-mem/0: storing 1062 in location 1002
-run/0: instruction run1001/2
-run/0: {name: "s1", value: 2, type: 2-5-4, properties: ["s1": "address":"array":"character"]} <- get/24 {name: "x", value: 1, type: 2-9, properties: ["x": "address":"buffer", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1002 is 1062
-run/0: ingredient 1 is data
-run/0: address to copy is 1063
-run/0: its type is 2
-mem/0: location 1063 is 1064
-run/0: product 0 is 1064
-mem/0: storing 1064 in location 1003
-run/0: instruction run1001/3
-run/0: {name: "x", value: 1, type: 2-9, properties: ["x": "address":"buffer"]} <- buffer-append/104 {name: "x", value: 1, type: 2-9, properties: ["x": "address":"buffer"]}, {name: "97", value: 97, type: 0, properties: ["97": "literal"]}
-mem/0: location 1002 is 1062
-run/0: instruction buffer-append/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1068
-run/0: instruction buffer-append/1
-run/0: {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]} <- next-ingredient/30 
-run/0: product 0 is 1062
-mem/0: storing 1062 in location 1070
-run/0: instruction buffer-append/2
-run/0: {name: "c", value: 2, type: 4, properties: ["c": "character"]} <- next-ingredient/30 
-run/0: product 0 is 97
-mem/0: storing 97 in location 1071
-run/0: instruction buffer-append/4
-run/0: {name: "full?", value: 3, type: 3, properties: ["full?": "boolean"]} <- buffer-full?/103 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]}
-mem/0: location 1070 is 1062
-run/0: instruction buffer-full?/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1099
-run/0: instruction buffer-full?/1
-run/0: {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]} <- next-ingredient/30 
-run/0: product 0 is 1062
-mem/0: storing 1062 in location 1101
-run/0: instruction buffer-full?/2
-run/0: {name: "len", value: 2, type: 1, properties: ["len": "integer"]} <- get/24 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "length", value: 0, type: 0, properties: ["length": "offset"]}
-run/0: ingredient 0 is in
-mem/0: location 1101 is 1062
-run/0: ingredient 1 is length
-run/0: address to copy is 1062
-run/0: its type is 1
-mem/0: location 1062 is 0
-run/0: product 0 is 0
-mem/0: storing 0 in location 1102
-run/0: instruction buffer-full?/3
-run/0: {name: "s", value: 3, type: 2-5-4, properties: ["s": "address":"array":"character"]} <- get/24 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is in
-mem/0: location 1101 is 1062
-run/0: ingredient 1 is data
-run/0: address to copy is 1063
-run/0: its type is 2
-mem/0: location 1063 is 1064
-run/0: product 0 is 1064
-mem/0: storing 1064 in location 1103
-run/0: instruction buffer-full?/4
-run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- length/28 {name: "s", value: 3, type: 2-5-4, properties: ["s": "address":"array":"character", "deref": ]}
-mem/0: location 1103 is 1064
-mem/0: storing 3 in location 1104
-run/0: instruction buffer-full?/5
-run/0: {name: "result", value: 5, type: 3, properties: ["result": "boolean"]} <- greater-or-equal/16 {name: "len", value: 2, type: 1, properties: ["len": "integer"]}, {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}
-run/0: ingredient 0 is len
-mem/0: location 1102 is 0
-run/0: ingredient 1 is capacity
-mem/0: location 1104 is 3
-run/0: product 0 is 0
-mem/0: storing 0 in location 1105
-run/0: instruction buffer-full?/6
-run/0: reply/33 {name: "result", value: 5, type: 3, properties: ["result": "boolean"]}
-mem/0: location 1105 is 0
-run/0: result 0 is 0
-mem/0: storing 0 in location 1072
-run/0: instruction buffer-append/5
-run/0: break-unless/12 {name: "full?", value: 3, type: 3, properties: ["full?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
-mem/0: location 1072 is 0
-run/0: ingredient 0 is 0
-run/0: ingredient 1 is 
-run/0: jumping to instruction 7
-run/0: instruction buffer-append/8
-run/0: {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer"]} <- get-address/25 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "length", value: 0, type: 0, properties: ["length": "offset"]}
-run/0: ingredient 0 is in
-mem/0: location 1070 is 1062
-run/0: ingredient 1 is length
-run/0: address to copy is 1062
-run/0: product 0 is 1062
-mem/0: storing 1062 in location 1073
-run/0: instruction buffer-append/9
-run/0: {name: "s", value: 5, type: 2-5-4, properties: ["s": "address":"array":"character"]} <- get/24 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is in
-mem/0: location 1070 is 1062
-run/0: ingredient 1 is data
-run/0: address to copy is 1063
-run/0: its type is 2
-mem/0: location 1063 is 1064
-run/0: product 0 is 1064
-mem/0: storing 1064 in location 1074
-run/0: instruction buffer-append/10
-run/0: {name: "dest", value: 6, type: 2-4, properties: ["dest": "address":"character"]} <- index-address/27 {name: "s", value: 5, type: 2-5-4, properties: ["s": "address":"array":"character", "deref": ]}, {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]}
-run/0: ingredient 0 is s
-mem/0: location 1074 is 1064
-run/0: ingredient 1 is {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]}
-mem/0: location 1073 is 1062
-mem/0: location 1062 is 0
-run/0: address to copy is 1065
-run/0: product 0 is 1065
-mem/0: storing 1065 in location 1075
-run/0: instruction buffer-append/11
-run/0: {name: "dest", value: 6, type: 2-4, properties: ["dest": "address":"character", "deref": ]} <- copy/1 {name: "c", value: 2, type: 4, properties: ["c": "character"]}
-run/0: ingredient 0 is c
-mem/0: location 1071 is 97
-mem/0: location 1075 is 1065
-mem/0: storing 97 in location 1065
-run/0: instruction buffer-append/12
-run/0: {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]} <- add/2 {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is len
-mem/0: location 1073 is 1062
-mem/0: location 1062 is 0
-run/0: ingredient 1 is 1
-run/0: product 0 is 1
-mem/0: location 1073 is 1062
-mem/0: storing 1 in location 1062
-run/0: instruction buffer-append/13
-run/0: reply/33 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "same-as-ingredient": "0"]}
-mem/0: location 1070 is 1062
-run/0: result 0 is 1062
-mem/0: storing 1062 in location 1002
-run/0: instruction run1001/4
-run/0: {name: "x", value: 1, type: 2-9, properties: ["x": "address":"buffer"]} <- buffer-append/104 {name: "x", value: 1, type: 2-9, properties: ["x": "address":"buffer"]}, {name: "98", value: 98, type: 0, properties: ["98": "literal"]}
-mem/0: location 1002 is 1062
-run/0: instruction buffer-append/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1130
-run/0: instruction buffer-append/1
-run/0: {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]} <- next-ingredient/30 
-run/0: product 0 is 1062
-mem/0: storing 1062 in location 1132
-run/0: instruction buffer-append/2
-run/0: {name: "c", value: 2, type: 4, properties: ["c": "character"]} <- next-ingredient/30 
-run/0: product 0 is 98
-mem/0: storing 98 in location 1133
-run/0: instruction buffer-append/4
-run/0: {name: "full?", value: 3, type: 3, properties: ["full?": "boolean"]} <- buffer-full?/103 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]}
-mem/0: location 1132 is 1062
-run/0: instruction buffer-full?/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1161
-run/0: instruction buffer-full?/1
-run/0: {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]} <- next-ingredient/30 
-run/0: product 0 is 1062
-mem/0: storing 1062 in location 1163
-run/0: instruction buffer-full?/2
-run/0: {name: "len", value: 2, type: 1, properties: ["len": "integer"]} <- get/24 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "length", value: 0, type: 0, properties: ["length": "offset"]}
-run/0: ingredient 0 is in
-mem/0: location 1163 is 1062
-run/0: ingredient 1 is length
-run/0: address to copy is 1062
-run/0: its type is 1
-mem/0: location 1062 is 1
-run/0: product 0 is 1
-mem/0: storing 1 in location 1164
-run/0: instruction buffer-full?/3
-run/0: {name: "s", value: 3, type: 2-5-4, properties: ["s": "address":"array":"character"]} <- get/24 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is in
-mem/0: location 1163 is 1062
-run/0: ingredient 1 is data
-run/0: address to copy is 1063
-run/0: its type is 2
-mem/0: location 1063 is 1064
-run/0: product 0 is 1064
-mem/0: storing 1064 in location 1165
-run/0: instruction buffer-full?/4
-run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- length/28 {name: "s", value: 3, type: 2-5-4, properties: ["s": "address":"array":"character", "deref": ]}
-mem/0: location 1165 is 1064
-mem/0: storing 3 in location 1166
-run/0: instruction buffer-full?/5
-run/0: {name: "result", value: 5, type: 3, properties: ["result": "boolean"]} <- greater-or-equal/16 {name: "len", value: 2, type: 1, properties: ["len": "integer"]}, {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}
-run/0: ingredient 0 is len
-mem/0: location 1164 is 1
-run/0: ingredient 1 is capacity
-mem/0: location 1166 is 3
-run/0: product 0 is 0
-mem/0: storing 0 in location 1167
-run/0: instruction buffer-full?/6
-run/0: reply/33 {name: "result", value: 5, type: 3, properties: ["result": "boolean"]}
-mem/0: location 1167 is 0
-run/0: result 0 is 0
-mem/0: storing 0 in location 1134
-run/0: instruction buffer-append/5
-run/0: break-unless/12 {name: "full?", value: 3, type: 3, properties: ["full?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
-mem/0: location 1134 is 0
-run/0: ingredient 0 is 0
-run/0: ingredient 1 is 
-run/0: jumping to instruction 7
-run/0: instruction buffer-append/8
-run/0: {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer"]} <- get-address/25 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "length", value: 0, type: 0, properties: ["length": "offset"]}
-run/0: ingredient 0 is in
-mem/0: location 1132 is 1062
-run/0: ingredient 1 is length
-run/0: address to copy is 1062
-run/0: product 0 is 1062
-mem/0: storing 1062 in location 1135
-run/0: instruction buffer-append/9
-run/0: {name: "s", value: 5, type: 2-5-4, properties: ["s": "address":"array":"character"]} <- get/24 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is in
-mem/0: location 1132 is 1062
-run/0: ingredient 1 is data
-run/0: address to copy is 1063
-run/0: its type is 2
-mem/0: location 1063 is 1064
-run/0: product 0 is 1064
-mem/0: storing 1064 in location 1136
-run/0: instruction buffer-append/10
-run/0: {name: "dest", value: 6, type: 2-4, properties: ["dest": "address":"character"]} <- index-address/27 {name: "s", value: 5, type: 2-5-4, properties: ["s": "address":"array":"character", "deref": ]}, {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]}
-run/0: ingredient 0 is s
-mem/0: location 1136 is 1064
-run/0: ingredient 1 is {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]}
-mem/0: location 1135 is 1062
-mem/0: location 1062 is 1
-run/0: address to copy is 1066
-run/0: product 0 is 1066
-mem/0: storing 1066 in location 1137
-run/0: instruction buffer-append/11
-run/0: {name: "dest", value: 6, type: 2-4, properties: ["dest": "address":"character", "deref": ]} <- copy/1 {name: "c", value: 2, type: 4, properties: ["c": "character"]}
-run/0: ingredient 0 is c
-mem/0: location 1133 is 98
-mem/0: location 1137 is 1066
-mem/0: storing 98 in location 1066
-run/0: instruction buffer-append/12
-run/0: {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]} <- add/2 {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is len
-mem/0: location 1135 is 1062
-mem/0: location 1062 is 1
-run/0: ingredient 1 is 1
-run/0: product 0 is 2
-mem/0: location 1135 is 1062
-mem/0: storing 2 in location 1062
-run/0: instruction buffer-append/13
-run/0: reply/33 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "same-as-ingredient": "0"]}
-mem/0: location 1132 is 1062
-run/0: result 0 is 1062
-mem/0: storing 1062 in location 1002
-run/0: instruction run1001/5
-run/0: {name: "x", value: 1, type: 2-9, properties: ["x": "address":"buffer"]} <- buffer-append/104 {name: "x", value: 1, type: 2-9, properties: ["x": "address":"buffer"]}, {name: "99", value: 99, type: 0, properties: ["99": "literal"]}
-mem/0: location 1002 is 1062
-run/0: instruction buffer-append/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1192
-run/0: instruction buffer-append/1
-run/0: {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]} <- next-ingredient/30 
-run/0: product 0 is 1062
-mem/0: storing 1062 in location 1194
-run/0: instruction buffer-append/2
-run/0: {name: "c", value: 2, type: 4, properties: ["c": "character"]} <- next-ingredient/30 
-run/0: product 0 is 99
-mem/0: storing 99 in location 1195
-run/0: instruction buffer-append/4
-run/0: {name: "full?", value: 3, type: 3, properties: ["full?": "boolean"]} <- buffer-full?/103 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]}
-mem/0: location 1194 is 1062
-run/0: instruction buffer-full?/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1223
-run/0: instruction buffer-full?/1
-run/0: {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]} <- next-ingredient/30 
-run/0: product 0 is 1062
-mem/0: storing 1062 in location 1225
-run/0: instruction buffer-full?/2
-run/0: {name: "len", value: 2, type: 1, properties: ["len": "integer"]} <- get/24 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "length", value: 0, type: 0, properties: ["length": "offset"]}
-run/0: ingredient 0 is in
-mem/0: location 1225 is 1062
-run/0: ingredient 1 is length
-run/0: address to copy is 1062
-run/0: its type is 1
-mem/0: location 1062 is 2
-run/0: product 0 is 2
-mem/0: storing 2 in location 1226
-run/0: instruction buffer-full?/3
-run/0: {name: "s", value: 3, type: 2-5-4, properties: ["s": "address":"array":"character"]} <- get/24 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is in
-mem/0: location 1225 is 1062
-run/0: ingredient 1 is data
-run/0: address to copy is 1063
-run/0: its type is 2
-mem/0: location 1063 is 1064
-run/0: product 0 is 1064
-mem/0: storing 1064 in location 1227
-run/0: instruction buffer-full?/4
-run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- length/28 {name: "s", value: 3, type: 2-5-4, properties: ["s": "address":"array":"character", "deref": ]}
-mem/0: location 1227 is 1064
-mem/0: storing 3 in location 1228
-run/0: instruction buffer-full?/5
-run/0: {name: "result", value: 5, type: 3, properties: ["result": "boolean"]} <- greater-or-equal/16 {name: "len", value: 2, type: 1, properties: ["len": "integer"]}, {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}
-run/0: ingredient 0 is len
-mem/0: location 1226 is 2
-run/0: ingredient 1 is capacity
-mem/0: location 1228 is 3
-run/0: product 0 is 0
-mem/0: storing 0 in location 1229
-run/0: instruction buffer-full?/6
-run/0: reply/33 {name: "result", value: 5, type: 3, properties: ["result": "boolean"]}
-mem/0: location 1229 is 0
-run/0: result 0 is 0
-mem/0: storing 0 in location 1196
-run/0: instruction buffer-append/5
-run/0: break-unless/12 {name: "full?", value: 3, type: 3, properties: ["full?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
-mem/0: location 1196 is 0
-run/0: ingredient 0 is 0
-run/0: ingredient 1 is 
-run/0: jumping to instruction 7
-run/0: instruction buffer-append/8
-run/0: {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer"]} <- get-address/25 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "length", value: 0, type: 0, properties: ["length": "offset"]}
-run/0: ingredient 0 is in
-mem/0: location 1194 is 1062
-run/0: ingredient 1 is length
-run/0: address to copy is 1062
-run/0: product 0 is 1062
-mem/0: storing 1062 in location 1197
-run/0: instruction buffer-append/9
-run/0: {name: "s", value: 5, type: 2-5-4, properties: ["s": "address":"array":"character"]} <- get/24 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is in
-mem/0: location 1194 is 1062
-run/0: ingredient 1 is data
-run/0: address to copy is 1063
-run/0: its type is 2
-mem/0: location 1063 is 1064
-run/0: product 0 is 1064
-mem/0: storing 1064 in location 1198
-run/0: instruction buffer-append/10
-run/0: {name: "dest", value: 6, type: 2-4, properties: ["dest": "address":"character"]} <- index-address/27 {name: "s", value: 5, type: 2-5-4, properties: ["s": "address":"array":"character", "deref": ]}, {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]}
-run/0: ingredient 0 is s
-mem/0: location 1198 is 1064
-run/0: ingredient 1 is {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]}
-mem/0: location 1197 is 1062
-mem/0: location 1062 is 2
-run/0: address to copy is 1067
-run/0: product 0 is 1067
-mem/0: storing 1067 in location 1199
-run/0: instruction buffer-append/11
-run/0: {name: "dest", value: 6, type: 2-4, properties: ["dest": "address":"character", "deref": ]} <- copy/1 {name: "c", value: 2, type: 4, properties: ["c": "character"]}
-run/0: ingredient 0 is c
-mem/0: location 1195 is 99
-mem/0: location 1199 is 1067
-mem/0: storing 99 in location 1067
-run/0: instruction buffer-append/12
-run/0: {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]} <- add/2 {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is len
-mem/0: location 1197 is 1062
-mem/0: location 1062 is 2
-run/0: ingredient 1 is 1
-run/0: product 0 is 3
-mem/0: location 1197 is 1062
-mem/0: storing 3 in location 1062
-run/0: instruction buffer-append/13
-run/0: reply/33 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "same-as-ingredient": "0"]}
-mem/0: location 1194 is 1062
-run/0: result 0 is 1062
-mem/0: storing 1062 in location 1002
-run/0: instruction run1001/6
-run/0: {name: "s2", value: 3, type: 2-5-4, properties: ["s2": "address":"array":"character"]} <- get/24 {name: "x", value: 1, type: 2-9, properties: ["x": "address":"buffer", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1002 is 1062
-run/0: ingredient 1 is data
-run/0: address to copy is 1063
-run/0: its type is 2
-mem/0: location 1063 is 1064
-run/0: product 0 is 1064
-mem/0: storing 1064 in location 1004
-run/0: instruction run1001/7
-run/0: {name: "1", value: 1, type: 3, properties: ["1": "boolean", "raw": ]} <- equal/13 {name: "s1", value: 2, type: 2-5-4, properties: ["s1": "address":"array":"character"]}, {name: "s2", value: 3, type: 2-5-4, properties: ["s2": "address":"array":"character"]}
-run/0: ingredient 0 is s1
-mem/0: location 1003 is 1064
-run/0: ingredient 1 is s2
-mem/0: location 1004 is 1064
-run/0: product 0 is 1
-mem/0: storing 1 in location 1
-run/0: instruction run1001/8
-run/0: {name: "2", value: 2, type: 5-4, properties: ["2": "array":"character", "raw": ]} <- copy/1 {name: "s2", value: 3, type: 2-5-4, properties: ["s2": "address":"array":"character", "deref": ]}
-run/0: ingredient 0 is s2
-mem/0: location 1004 is 1064
-mem/0: location 1064 is 3
-mem/0: location 1065 is 97
-mem/0: location 1066 is 98
-mem/0: location 1067 is 99
-mem/0: storing 3 in location 2
-mem/0: storing 97 in location 3
-mem/0: storing 98 in location 4
-mem/0: storing 99 in location 5
-run/0: instruction run1001/10
-run/0: {name: "x", value: 1, type: 2-9, properties: ["x": "address":"buffer"]} <- buffer-append/104 {name: "x", value: 1, type: 2-9, properties: ["x": "address":"buffer"]}, {name: "100", value: 100, type: 0, properties: ["100": "literal"]}
-mem/0: location 1002 is 1062
-run/0: instruction buffer-append/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1254
-run/0: instruction buffer-append/1
-run/0: {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]} <- next-ingredient/30 
-run/0: product 0 is 1062
-mem/0: storing 1062 in location 1256
-run/0: instruction buffer-append/2
-run/0: {name: "c", value: 2, type: 4, properties: ["c": "character"]} <- next-ingredient/30 
-run/0: product 0 is 100
-mem/0: storing 100 in location 1257
-run/0: instruction buffer-append/4
-run/0: {name: "full?", value: 3, type: 3, properties: ["full?": "boolean"]} <- buffer-full?/103 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]}
-mem/0: location 1256 is 1062
-run/0: instruction buffer-full?/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1285
-run/0: instruction buffer-full?/1
-run/0: {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]} <- next-ingredient/30 
-run/0: product 0 is 1062
-mem/0: storing 1062 in location 1287
-run/0: instruction buffer-full?/2
-run/0: {name: "len", value: 2, type: 1, properties: ["len": "integer"]} <- get/24 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "length", value: 0, type: 0, properties: ["length": "offset"]}
-run/0: ingredient 0 is in
-mem/0: location 1287 is 1062
-run/0: ingredient 1 is length
-run/0: address to copy is 1062
-run/0: its type is 1
-mem/0: location 1062 is 3
-run/0: product 0 is 3
-mem/0: storing 3 in location 1288
-run/0: instruction buffer-full?/3
-run/0: {name: "s", value: 3, type: 2-5-4, properties: ["s": "address":"array":"character"]} <- get/24 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is in
-mem/0: location 1287 is 1062
-run/0: ingredient 1 is data
-run/0: address to copy is 1063
-run/0: its type is 2
-mem/0: location 1063 is 1064
-run/0: product 0 is 1064
-mem/0: storing 1064 in location 1289
-run/0: instruction buffer-full?/4
-run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- length/28 {name: "s", value: 3, type: 2-5-4, properties: ["s": "address":"array":"character", "deref": ]}
-mem/0: location 1289 is 1064
-mem/0: storing 3 in location 1290
-run/0: instruction buffer-full?/5
-run/0: {name: "result", value: 5, type: 3, properties: ["result": "boolean"]} <- greater-or-equal/16 {name: "len", value: 2, type: 1, properties: ["len": "integer"]}, {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}
-run/0: ingredient 0 is len
-mem/0: location 1288 is 3
-run/0: ingredient 1 is capacity
-mem/0: location 1290 is 3
-run/0: product 0 is 1
-mem/0: storing 1 in location 1291
-run/0: instruction buffer-full?/6
-run/0: reply/33 {name: "result", value: 5, type: 3, properties: ["result": "boolean"]}
-mem/0: location 1291 is 1
-run/0: result 0 is 1
-mem/0: storing 1 in location 1258
-run/0: instruction buffer-append/5
-run/0: break-unless/12 {name: "full?", value: 3, type: 3, properties: ["full?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
-mem/0: location 1258 is 1
-run/0: ingredient 0 is 1
-run/0: jump-unless fell through
-run/0: instruction buffer-append/6
-run/0: {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]} <- grow-buffer/102 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]}
-mem/0: location 1256 is 1062
-run/0: instruction grow-buffer/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1316
-run/0: instruction grow-buffer/1
-run/0: {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]} <- next-ingredient/30 
-run/0: product 0 is 1062
-mem/0: storing 1062 in location 1318
-run/0: instruction grow-buffer/2
-run/0: {name: "x", value: 2, type: 2-2-5-4, properties: ["x": "address":"address":"array":"character"]} <- get-address/25 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is in
-mem/0: location 1318 is 1062
-run/0: ingredient 1 is data
-run/0: address to copy is 1063
-run/0: product 0 is 1063
-mem/0: storing 1063 in location 1319
-run/0: instruction grow-buffer/3
-run/0: {name: "oldlen", value: 3, type: 1, properties: ["oldlen": "integer"]} <- length/28 {name: "x", value: 2, type: 2-2-5-4, properties: ["x": "address":"address":"array":"character", "deref": , "deref": ]}
-mem/0: location 1319 is 1063
-mem/0: location 1063 is 1064
-mem/0: storing 3 in location 1320
-run/0: instruction grow-buffer/4
-run/0: {name: "newlen", value: 4, type: 1, properties: ["newlen": "integer"]} <- multiply/4 {name: "oldlen", value: 3, type: 1, properties: ["oldlen": "integer"]}, {name: "2", value: 2, type: 0, properties: ["2": "literal"]}
-run/0: ingredient 0 is oldlen
-mem/0: location 1320 is 3
-run/0: ingredient 1 is 2
-run/0: ingredient 1 is 2
-run/0: product 0 is 6
-mem/0: storing 6 in location 1321
-run/0: instruction grow-buffer/5
-run/0: {name: "olddata", value: 5, type: 2-5-4, properties: ["olddata": "address":"array":"character"]} <- copy/1 {name: "x", value: 2, type: 2-2-5-4, properties: ["x": "address":"address":"array":"character", "deref": ]}
-run/0: ingredient 0 is x
-mem/0: location 1319 is 1063
-mem/0: location 1063 is 1064
-mem/0: storing 1064 in location 1322
-run/0: instruction grow-buffer/6
-run/0: {name: "x", value: 2, type: 2-2-5-4, properties: ["x": "address":"address":"array":"character", "deref": ]} <- new/44 {name: "character", value: 4, type: 0, properties: ["character": "type"]}, {name: "newlen", value: 4, type: 1, properties: ["newlen": "integer"]}
-mem/0: location 1321 is 6
-mem/0: array size is 6
-mem/0: new alloc: 1347
-mem/0: location 1319 is 1063
-mem/0: storing 1347 in location 1063
-run/0: instruction grow-buffer/7
-run/0: {name: "i", value: 6, type: 1, properties: ["i": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
-mem/0: storing 0 in location 1323
-run/0: instruction grow-buffer/9
-run/0: {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 6, type: 1, properties: ["i": "integer"]}, {name: "oldlen", value: 3, type: 1, properties: ["oldlen": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1323 is 0
-run/0: ingredient 1 is oldlen
-mem/0: location 1320 is 3
-run/0: product 0 is 0
-mem/0: storing 0 in location 1324
-run/0: instruction grow-buffer/10
-run/0: break-if/11 {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 5, type: , properties: ["": ]}
-mem/0: location 1324 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction grow-buffer/11
-run/0: {name: "src", value: 8, type: 4, properties: ["src": "character"]} <- index/26 {name: "olddata", value: 5, type: 2-5-4, properties: ["olddata": "address":"array":"character", "deref": ]}, {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is {name: "olddata", value: 5, type: 2-5-4, properties: ["olddata": "address":"array":"character", "deref": ]}
-mem/0: location 1322 is 1064
-run/0: ingredient 1 is {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
-mem/0: location 1323 is 0
-run/0: address to copy is 1065
-run/0: its type is 4
-mem/0: location 1065 is 97
-run/0: product 0 is 97
-mem/0: storing 97 in location 1325
-run/0: instruction grow-buffer/12
-run/0: {name: "dest", value: 9, type: 2-4, properties: ["dest": "address":"character"]} <- index-address/27 {name: "x", value: 2, type: 2-2-5-4, properties: ["x": "address":"address":"array":"character", "deref": , "deref": ]}, {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is x
-mem/0: location 1319 is 1063
-mem/0: location 1063 is 1347
-run/0: ingredient 1 is {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
-mem/0: location 1323 is 0
-run/0: address to copy is 1348
-run/0: product 0 is 1348
-mem/0: storing 1348 in location 1326
-run/0: instruction grow-buffer/13
-run/0: {name: "dest", value: 9, type: 2-4, properties: ["dest": "address":"character", "deref": ]} <- copy/1 {name: "src", value: 8, type: 4, properties: ["src": "character"]}
-run/0: ingredient 0 is src
-mem/0: location 1325 is 97
-mem/0: location 1326 is 1348
-mem/0: storing 97 in location 1348
-run/0: instruction grow-buffer/14
-run/0: {name: "i", value: 6, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 6, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1323 is 0
-run/0: ingredient 1 is 1
-run/0: product 0 is 1
-mem/0: storing 1 in location 1323
-run/0: instruction grow-buffer/15
-run/0: loop/10 {name: "", value: -7, type: , properties: ["": ]}
-run/0: ingredient 0 is -7
-run/0: jumping to instruction 9
-run/0: instruction grow-buffer/9
-run/0: {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 6, type: 1, properties: ["i": "integer"]}, {name: "oldlen", value: 3, type: 1, properties: ["oldlen": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1323 is 1
-run/0: ingredient 1 is oldlen
-mem/0: location 1320 is 3
-run/0: product 0 is 0
-mem/0: storing 0 in location 1324
-run/0: instruction grow-buffer/10
-run/0: break-if/11 {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 5, type: , properties: ["": ]}
-mem/0: location 1324 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction grow-buffer/11
-run/0: {name: "src", value: 8, type: 4, properties: ["src": "character"]} <- index/26 {name: "olddata", value: 5, type: 2-5-4, properties: ["olddata": "address":"array":"character", "deref": ]}, {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is {name: "olddata", value: 5, type: 2-5-4, properties: ["olddata": "address":"array":"character", "deref": ]}
-mem/0: location 1322 is 1064
-run/0: ingredient 1 is {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
-mem/0: location 1323 is 1
-run/0: address to copy is 1066
-run/0: its type is 4
-mem/0: location 1066 is 98
-run/0: product 0 is 98
-mem/0: storing 98 in location 1325
-run/0: instruction grow-buffer/12
-run/0: {name: "dest", value: 9, type: 2-4, properties: ["dest": "address":"character"]} <- index-address/27 {name: "x", value: 2, type: 2-2-5-4, properties: ["x": "address":"address":"array":"character", "deref": , "deref": ]}, {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is x
-mem/0: location 1319 is 1063
-mem/0: location 1063 is 1347
-run/0: ingredient 1 is {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
-mem/0: location 1323 is 1
-run/0: address to copy is 1349
-run/0: product 0 is 1349
-mem/0: storing 1349 in location 1326
-run/0: instruction grow-buffer/13
-run/0: {name: "dest", value: 9, type: 2-4, properties: ["dest": "address":"character", "deref": ]} <- copy/1 {name: "src", value: 8, type: 4, properties: ["src": "character"]}
-run/0: ingredient 0 is src
-mem/0: location 1325 is 98
-mem/0: location 1326 is 1349
-mem/0: storing 98 in location 1349
-run/0: instruction grow-buffer/14
-run/0: {name: "i", value: 6, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 6, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1323 is 1
-run/0: ingredient 1 is 1
-run/0: product 0 is 2
-mem/0: storing 2 in location 1323
-run/0: instruction grow-buffer/15
-run/0: loop/10 {name: "", value: -7, type: , properties: ["": ]}
-run/0: ingredient 0 is -7
-run/0: jumping to instruction 9
-run/0: instruction grow-buffer/9
-run/0: {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 6, type: 1, properties: ["i": "integer"]}, {name: "oldlen", value: 3, type: 1, properties: ["oldlen": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1323 is 2
-run/0: ingredient 1 is oldlen
-mem/0: location 1320 is 3
-run/0: product 0 is 0
-mem/0: storing 0 in location 1324
-run/0: instruction grow-buffer/10
-run/0: break-if/11 {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 5, type: , properties: ["": ]}
-mem/0: location 1324 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction grow-buffer/11
-run/0: {name: "src", value: 8, type: 4, properties: ["src": "character"]} <- index/26 {name: "olddata", value: 5, type: 2-5-4, properties: ["olddata": "address":"array":"character", "deref": ]}, {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is {name: "olddata", value: 5, type: 2-5-4, properties: ["olddata": "address":"array":"character", "deref": ]}
-mem/0: location 1322 is 1064
-run/0: ingredient 1 is {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
-mem/0: location 1323 is 2
-run/0: address to copy is 1067
-run/0: its type is 4
-mem/0: location 1067 is 99
-run/0: product 0 is 99
-mem/0: storing 99 in location 1325
-run/0: instruction grow-buffer/12
-run/0: {name: "dest", value: 9, type: 2-4, properties: ["dest": "address":"character"]} <- index-address/27 {name: "x", value: 2, type: 2-2-5-4, properties: ["x": "address":"address":"array":"character", "deref": , "deref": ]}, {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is x
-mem/0: location 1319 is 1063
-mem/0: location 1063 is 1347
-run/0: ingredient 1 is {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
-mem/0: location 1323 is 2
-run/0: address to copy is 1350
-run/0: product 0 is 1350
-mem/0: storing 1350 in location 1326
-run/0: instruction grow-buffer/13
-run/0: {name: "dest", value: 9, type: 2-4, properties: ["dest": "address":"character", "deref": ]} <- copy/1 {name: "src", value: 8, type: 4, properties: ["src": "character"]}
-run/0: ingredient 0 is src
-mem/0: location 1325 is 99
-mem/0: location 1326 is 1350
-mem/0: storing 99 in location 1350
-run/0: instruction grow-buffer/14
-run/0: {name: "i", value: 6, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 6, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1323 is 2
-run/0: ingredient 1 is 1
-run/0: product 0 is 3
-mem/0: storing 3 in location 1323
-run/0: instruction grow-buffer/15
-run/0: loop/10 {name: "", value: -7, type: , properties: ["": ]}
-run/0: ingredient 0 is -7
-run/0: jumping to instruction 9
-run/0: instruction grow-buffer/9
-run/0: {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 6, type: 1, properties: ["i": "integer"]}, {name: "oldlen", value: 3, type: 1, properties: ["oldlen": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1323 is 3
-run/0: ingredient 1 is oldlen
-mem/0: location 1320 is 3
-run/0: product 0 is 1
-mem/0: storing 1 in location 1324
-run/0: instruction grow-buffer/10
-run/0: break-if/11 {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 5, type: , properties: ["": ]}
-mem/0: location 1324 is 1
-run/0: ingredient 0 is 1
-run/0: ingredient 1 is 
-run/0: jumping to instruction 16
-run/0: instruction grow-buffer/17
-run/0: reply/33 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]}
-mem/0: location 1318 is 1062
-run/0: result 0 is 1062
-mem/0: storing 1062 in location 1256
-run/0: instruction buffer-append/8
-run/0: {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer"]} <- get-address/25 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "length", value: 0, type: 0, properties: ["length": "offset"]}
-run/0: ingredient 0 is in
-mem/0: location 1256 is 1062
-run/0: ingredient 1 is length
-run/0: address to copy is 1062
-run/0: product 0 is 1062
-mem/0: storing 1062 in location 1259
-run/0: instruction buffer-append/9
-run/0: {name: "s", value: 5, type: 2-5-4, properties: ["s": "address":"array":"character"]} <- get/24 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is in
-mem/0: location 1256 is 1062
-run/0: ingredient 1 is data
-run/0: address to copy is 1063
-run/0: its type is 2
-mem/0: location 1063 is 1347
-run/0: product 0 is 1347
-mem/0: storing 1347 in location 1260
-run/0: instruction buffer-append/10
-run/0: {name: "dest", value: 6, type: 2-4, properties: ["dest": "address":"character"]} <- index-address/27 {name: "s", value: 5, type: 2-5-4, properties: ["s": "address":"array":"character", "deref": ]}, {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]}
-run/0: ingredient 0 is s
-mem/0: location 1260 is 1347
-run/0: ingredient 1 is {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]}
-mem/0: location 1259 is 1062
-mem/0: location 1062 is 3
-run/0: address to copy is 1351
-run/0: product 0 is 1351
-mem/0: storing 1351 in location 1261
-run/0: instruction buffer-append/11
-run/0: {name: "dest", value: 6, type: 2-4, properties: ["dest": "address":"character", "deref": ]} <- copy/1 {name: "c", value: 2, type: 4, properties: ["c": "character"]}
-run/0: ingredient 0 is c
-mem/0: location 1257 is 100
-mem/0: location 1261 is 1351
-mem/0: storing 100 in location 1351
-run/0: instruction buffer-append/12
-run/0: {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]} <- add/2 {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is len
-mem/0: location 1259 is 1062
-mem/0: location 1062 is 3
-run/0: ingredient 1 is 1
-run/0: product 0 is 4
-mem/0: location 1259 is 1062
-mem/0: storing 4 in location 1062
-run/0: instruction buffer-append/13
-run/0: reply/33 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "same-as-ingredient": "0"]}
-mem/0: location 1256 is 1062
-run/0: result 0 is 1062
-mem/0: storing 1062 in location 1002
-run/0: instruction run1001/11
-run/0: {name: "s3", value: 4, type: 2-5-4, properties: ["s3": "address":"array":"character"]} <- get/24 {name: "x", value: 1, type: 2-9, properties: ["x": "address":"buffer", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1002 is 1062
-run/0: ingredient 1 is data
-run/0: address to copy is 1063
-run/0: its type is 2
-mem/0: location 1063 is 1347
-run/0: product 0 is 1347
-mem/0: storing 1347 in location 1005
-run/0: instruction run1001/12
-run/0: {name: "10", value: 10, type: 3, properties: ["10": "boolean", "raw": ]} <- equal/13 {name: "s1", value: 2, type: 2-5-4, properties: ["s1": "address":"array":"character"]}, {name: "s3", value: 4, type: 2-5-4, properties: ["s3": "address":"array":"character"]}
-run/0: ingredient 0 is s1
-mem/0: location 1003 is 1064
-run/0: ingredient 1 is s3
-mem/0: location 1005 is 1347
-run/0: product 0 is 0
-mem/0: storing 0 in location 10
-run/0: instruction run1001/13
-run/0: {name: "11", value: 11, type: 1, properties: ["11": "integer", "raw": ]} <- get/24 {name: "x", value: 1, type: 2-9, properties: ["x": "address":"buffer", "deref": ]}, {name: "length", value: 0, type: 0, properties: ["length": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1002 is 1062
-run/0: ingredient 1 is length
-run/0: address to copy is 1062
-run/0: its type is 1
-mem/0: location 1062 is 4
-run/0: product 0 is 4
-mem/0: storing 4 in location 11
-run/0: instruction run1001/14
-run/0: {name: "12", value: 12, type: 5-4, properties: ["12": "array":"character", "raw": ]} <- copy/1 {name: "s3", value: 4, type: 2-5-4, properties: ["s3": "address":"array":"character", "deref": ]}
-run/0: ingredient 0 is s3
-mem/0: location 1005 is 1347
-mem/0: location 1347 is 6
-mem/0: location 1348 is 97
-mem/0: location 1349 is 98
-mem/0: location 1350 is 99
-mem/0: location 1351 is 100
-mem/0: location 1352 is 0
-mem/0: location 1353 is 0
-mem/0: storing 6 in location 12
-mem/0: storing 97 in location 13
-mem/0: storing 98 in location 14
-mem/0: storing 99 in location 15
-mem/0: storing 100 in location 16
-mem/0: storing 0 in location 17
-mem/0: storing 0 in location 18
-run/0: instruction buffer-append-works/1
-run/0: memory-should-contain/46 {name: "
-    # before +buffer-filled
-    1 <- 1   # no change in data pointer
-    2 <- 3   # size of data
-    3 <- 97  # data
-    4 <- 98
-    5 <- 99
-    # in the end
-    10 <- 0   # data pointer has grown
-    11 <- 4   # final length
-    12 <- 6   # but data's capacity has doubled
-    13 <- 97  # data
-    14 <- 98
-    15 <- 99
-    16 <- 100
-    17 <- 0
-    18 <- 0
-  ", value: 0, type: 0, properties: ["
-    # before +buffer-filled
-    1 <- 1   # no change in data pointer
-    2 <- 3   # size of data
-    3 <- 97  # data
-    4 <- 98
-    5 <- 99
-    # in the end
-    10 <- 0   # data pointer has grown
-    11 <- 4   # final length
-    12 <- 6   # but data's capacity has doubled
-    13 <- 97  # data
-    14 <- 98
-    15 <- 99
-    16 <- 100
-    17 <- 0
-    18 <- 0
-  ": "literal-string"]}
-run/0: checking location 1
-run/0: checking location 2
-run/0: checking location 3
-run/0: checking location 4
-run/0: checking location 5
-run/0: checking location 10
-run/0: checking location 11
-run/0: checking location 12
-run/0: checking location 13
-run/0: checking location 14
-run/0: checking location 15
-run/0: checking location 16
-run/0: checking location 17
-run/0: checking location 18
diff --git a/cpp/.traces/calling_recipe b/cpp/.traces/calling_recipe
deleted file mode 100644
index a7a66682..00000000
--- a/cpp/.traces/calling_recipe
+++ /dev/null
@@ -1,19 +0,0 @@
-parse/0: instruction: f
-parse/0: instruction: add
-parse/0:   ingredient: {name: "2", value: 0, type: 0, properties: ["2": "literal"]}
-parse/0:   ingredient: {name: "2", value: 0, type: 0, properties: ["2": "literal"]}
-parse/0:   product: {name: "3", value: 0, type: 1, properties: ["3": "integer"]}
-after-brace/0: recipe main
-after-brace/0: f ...
-after-brace/0: recipe f
-after-brace/0: add ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: f/1001 
-run/0: instruction f/0
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- add/2 {name: "2", value: 2, type: 0, properties: ["2": "literal"]}, {name: "2", value: 2, type: 0, properties: ["2": "literal"]}
-run/0: ingredient 0 is 2
-run/0: ingredient 1 is 2
-run/0: product 0 is 4
-mem/0: storing 4 in location 3
diff --git a/cpp/.traces/channel b/cpp/.traces/channel
deleted file mode 100644
index 1e3128c7..00000000
--- a/cpp/.traces/channel
+++ /dev/null
@@ -1,430 +0,0 @@
-parse/0: instruction: run
-parse/0:   ingredient: {name: "
-    1:address:channel <- init-channel 3:literal/capacity
-    1:address:channel <- write 1:address:channel, 34:literal
-    2:integer, 1:address:channel <- read 1:address:channel
-  ", value: 0, type: 0, properties: ["
-    1:address:channel <- init-channel 3:literal/capacity
-    1:address:channel <- write 1:address:channel, 34:literal
-    2:integer, 1:address:channel <- read 1:address:channel
-  ": "literal-string"]}
-parse/0: instruction: memory-should-contain
-parse/0:   ingredient: {name: "
-    2 <- 34
-  ", value: 0, type: 0, properties: ["
-    2 <- 34
-  ": "literal-string"]}
-after-brace/0: recipe channel
-after-brace/0: run ...
-after-brace/0: memory-should-contain ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: channel
-run/0: instruction channel/0
-run/0: run/45 {name: "
-    1:address:channel <- init-channel 3:literal/capacity
-    1:address:channel <- write 1:address:channel, 34:literal
-    2:integer, 1:address:channel <- read 1:address:channel
-  ", value: 0, type: 0, properties: ["
-    1:address:channel <- init-channel 3:literal/capacity
-    1:address:channel <- write 1:address:channel, 34:literal
-    2:integer, 1:address:channel <- read 1:address:channel
-  ": "literal-string"]}
-parse/0: instruction: init-channel
-parse/0:   ingredient: {name: "3", value: 0, type: 0, properties: ["3": "literal", "capacity": ]}
-parse/0:   product: {name: "1", value: 0, type: 2-10, properties: ["1": "address":"channel"]}
-parse/0: instruction: write
-parse/0:   ingredient: {name: "1", value: 0, type: 2-10, properties: ["1": "address":"channel"]}
-parse/0:   ingredient: {name: "34", value: 0, type: 0, properties: ["34": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 2-10, properties: ["1": "address":"channel"]}
-parse/0: instruction: read
-parse/0:   ingredient: {name: "1", value: 0, type: 2-10, properties: ["1": "address":"channel"]}
-parse/0:   product: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-parse/0:   product: {name: "1", value: 0, type: 2-10, properties: ["1": "address":"channel"]}
-after-brace/0: recipe run1001
-after-brace/0: init-channel ...
-after-brace/0: write ...
-after-brace/0: read ...
-run/0: instruction run1001/0
-run/0: {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]} <- init-channel/108 {name: "3", value: 3, type: 0, properties: ["3": "literal", "capacity": ]}
-run/0: instruction init-channel/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1000
-run/0: instruction init-channel/1
-run/0: {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel"]} <- new/44 {name: "channel", value: 10, type: 0, properties: ["channel": "type"]}
-mem/0: new alloc: 1031
-mem/0: storing 1031 in location 1002
-run/0: instruction init-channel/2
-run/0: {name: "full", value: 2, type: 2-1, properties: ["full": "address":"integer"]} <- get-address/25 {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
-run/0: ingredient 0 is result
-mem/0: location 1002 is 1031
-run/0: ingredient 1 is first-full
-run/0: address to copy is 1031
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1003
-run/0: instruction init-channel/3
-run/0: {name: "full", value: 2, type: 2-1, properties: ["full": "address":"integer", "deref": ]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
-mem/0: location 1003 is 1031
-mem/0: storing 0 in location 1031
-run/0: instruction init-channel/4
-run/0: {name: "free", value: 3, type: 2-1, properties: ["free": "address":"integer"]} <- get-address/25 {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
-run/0: ingredient 0 is result
-mem/0: location 1002 is 1031
-run/0: ingredient 1 is first-free
-run/0: address to copy is 1032
-run/0: product 0 is 1032
-mem/0: storing 1032 in location 1004
-run/0: instruction init-channel/5
-run/0: {name: "free", value: 3, type: 2-1, properties: ["free": "address":"integer", "deref": ]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
-mem/0: location 1004 is 1032
-mem/0: storing 0 in location 1032
-run/0: instruction init-channel/6
-run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- next-ingredient/30 
-run/0: product 0 is 3
-mem/0: storing 3 in location 1005
-run/0: instruction init-channel/7
-run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- add/2 {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is capacity
-mem/0: location 1005 is 3
-run/0: ingredient 1 is 1
-run/0: product 0 is 4
-mem/0: storing 4 in location 1005
-run/0: instruction init-channel/8
-run/0: {name: "dest", value: 5, type: 2-2-5-1, properties: ["dest": "address":"address":"array":"location"]} <- get-address/25 {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is result
-mem/0: location 1002 is 1031
-run/0: ingredient 1 is data
-run/0: address to copy is 1033
-run/0: product 0 is 1033
-mem/0: storing 1033 in location 1006
-run/0: instruction init-channel/9
-run/0: {name: "dest", value: 5, type: 2-2-5-1, properties: ["dest": "address":"address":"array":"location", "deref": ]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}
-mem/0: location 1005 is 4
-mem/0: array size is 4
-mem/0: new alloc: 1034
-mem/0: location 1006 is 1033
-mem/0: storing 1034 in location 1033
-run/0: instruction init-channel/10
-run/0: reply/33 {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel"]}
-mem/0: location 1002 is 1031
-run/0: result 0 is 1031
-mem/0: storing 1031 in location 1
-run/0: instruction run1001/1
-run/0: {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]} <- write/109 {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]}, {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
-mem/0: location 1 is 1031
-run/0: instruction write/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1039
-run/0: instruction write/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/30 
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1041
-run/0: instruction write/2
-run/0: {name: "val", value: 2, type: 1, properties: ["val": "location"]} <- next-ingredient/30 
-run/0: product 0 is 34
-mem/0: storing 34 in location 1042
-run/0: instruction write/4
-run/0: {name: "full", value: 3, type: 3, properties: ["full": "boolean"]} <- channel-full?/110 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]}
-mem/0: location 1041 is 1031
-run/0: instruction channel-full?/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1070
-run/0: instruction channel-full?/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/30 
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1072
-run/0: instruction channel-full?/2
-run/0: {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]} <- get/24 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
-run/0: ingredient 0 is chan
-mem/0: location 1072 is 1031
-run/0: ingredient 1 is first-free
-run/0: address to copy is 1032
-run/0: its type is 1
-mem/0: location 1032 is 0
-run/0: product 0 is 0
-mem/0: storing 0 in location 1073
-run/0: instruction channel-full?/3
-run/0: {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]} <- add/2 {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is tmp
-mem/0: location 1073 is 0
-run/0: ingredient 1 is 1
-run/0: product 0 is 1
-mem/0: storing 1 in location 1073
-run/0: instruction channel-full?/5
-run/0: {name: "len", value: 3, type: 1, properties: ["len": "integer"]} <- channel-capacity/113 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]}
-mem/0: location 1072 is 1031
-run/0: instruction channel-capacity/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1101
-run/0: instruction channel-capacity/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/30 
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1103
-run/0: instruction channel-capacity/2
-run/0: {name: "q", value: 2, type: 2-5-1, properties: ["q": "address":"array":"location"]} <- get/24 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is chan
-mem/0: location 1103 is 1031
-run/0: ingredient 1 is data
-run/0: address to copy is 1033
-run/0: its type is 2
-mem/0: location 1033 is 1034
-run/0: product 0 is 1034
-mem/0: storing 1034 in location 1104
-run/0: instruction channel-capacity/3
-run/0: {name: "result", value: 3, type: 1, properties: ["result": "integer"]} <- length/28 {name: "q", value: 2, type: 2-5-1, properties: ["q": "address":"array":"location", "deref": ]}
-mem/0: location 1104 is 1034
-mem/0: storing 4 in location 1105
-run/0: instruction channel-capacity/4
-run/0: reply/33 {name: "result", value: 3, type: 1, properties: ["result": "integer"]}
-mem/0: location 1105 is 4
-run/0: result 0 is 4
-mem/0: storing 4 in location 1074
-run/0: instruction channel-full?/6
-run/0: {name: "at-end?", value: 4, type: 3, properties: ["at-end?": "boolean"]} <- greater-or-equal/16 {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}, {name: "len", value: 3, type: 1, properties: ["len": "integer"]}
-run/0: ingredient 0 is tmp
-mem/0: location 1073 is 1
-run/0: ingredient 1 is len
-mem/0: location 1074 is 4
-run/0: product 0 is 0
-mem/0: storing 0 in location 1075
-run/0: instruction channel-full?/7
-run/0: break-unless/12 {name: "at-end?", value: 4, type: 3, properties: ["at-end?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
-mem/0: location 1075 is 0
-run/0: ingredient 0 is 0
-run/0: ingredient 1 is 
-run/0: jumping to instruction 9
-run/0: instruction channel-full?/10
-run/0: {name: "full", value: 5, type: 1, properties: ["full": "integer"]} <- get/24 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
-run/0: ingredient 0 is chan
-mem/0: location 1072 is 1031
-run/0: ingredient 1 is first-full
-run/0: address to copy is 1031
-run/0: its type is 1
-mem/0: location 1031 is 0
-run/0: product 0 is 0
-mem/0: storing 0 in location 1076
-run/0: instruction channel-full?/11
-run/0: {name: "result", value: 6, type: 3, properties: ["result": "boolean"]} <- equal/13 {name: "full", value: 5, type: 1, properties: ["full": "integer"]}, {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}
-run/0: ingredient 0 is full
-mem/0: location 1076 is 0
-run/0: ingredient 1 is tmp
-mem/0: location 1073 is 1
-run/0: product 0 is 0
-mem/0: storing 0 in location 1077
-run/0: instruction channel-full?/12
-run/0: reply/33 {name: "result", value: 6, type: 3, properties: ["result": "boolean"]}
-mem/0: location 1077 is 0
-run/0: result 0 is 0
-mem/0: storing 0 in location 1043
-run/0: instruction write/5
-run/0: break-unless/12 {name: "full", value: 3, type: 3, properties: ["full": "boolean"]}, {name: "", value: 2, type: , properties: ["": ]}
-mem/0: location 1043 is 0
-run/0: ingredient 0 is 0
-run/0: ingredient 1 is 
-run/0: jumping to instruction 8
-run/0: instruction write/9
-run/0: {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location"]} <- get/24 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is chan
-mem/0: location 1041 is 1031
-run/0: ingredient 1 is data
-run/0: address to copy is 1033
-run/0: its type is 2
-mem/0: location 1033 is 1034
-run/0: product 0 is 1034
-mem/0: storing 1034 in location 1045
-run/0: instruction write/10
-run/0: {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer"]} <- get-address/25 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
-run/0: ingredient 0 is chan
-mem/0: location 1041 is 1031
-run/0: ingredient 1 is first-free
-run/0: address to copy is 1032
-run/0: product 0 is 1032
-mem/0: storing 1032 in location 1046
-run/0: instruction write/11
-run/0: {name: "dest", value: 7, type: 2-1, properties: ["dest": "address":"location"]} <- index-address/27 {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}, {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}
-run/0: ingredient 0 is circular-buffer
-mem/0: location 1045 is 1034
-run/0: ingredient 1 is {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}
-mem/0: location 1046 is 1032
-mem/0: location 1032 is 0
-run/0: address to copy is 1035
-run/0: product 0 is 1035
-mem/0: storing 1035 in location 1047
-run/0: instruction write/12
-run/0: {name: "dest", value: 7, type: 2-1, properties: ["dest": "address":"location", "deref": ]} <- copy/1 {name: "val", value: 2, type: 1, properties: ["val": "location"]}
-run/0: ingredient 0 is val
-mem/0: location 1042 is 34
-mem/0: location 1047 is 1035
-mem/0: storing 34 in location 1035
-run/0: instruction write/13
-run/0: {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]} <- add/2 {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is free
-mem/0: location 1046 is 1032
-mem/0: location 1032 is 0
-run/0: ingredient 1 is 1
-run/0: product 0 is 1
-mem/0: location 1046 is 1032
-mem/0: storing 1 in location 1032
-run/0: instruction write/15
-run/0: {name: "len", value: 8, type: 1, properties: ["len": "integer"]} <- length/28 {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}
-mem/0: location 1045 is 1034
-mem/0: storing 4 in location 1048
-run/0: instruction write/16
-run/0: {name: "at-end?", value: 9, type: 3, properties: ["at-end?": "boolean"]} <- greater-or-equal/16 {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}, {name: "len", value: 8, type: 1, properties: ["len": "integer"]}
-run/0: ingredient 0 is free
-mem/0: location 1046 is 1032
-mem/0: location 1032 is 1
-run/0: ingredient 1 is len
-mem/0: location 1048 is 4
-run/0: product 0 is 0
-mem/0: storing 0 in location 1049
-run/0: instruction write/17
-run/0: break-unless/12 {name: "at-end?", value: 9, type: 3, properties: ["at-end?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
-mem/0: location 1049 is 0
-run/0: ingredient 0 is 0
-run/0: ingredient 1 is 
-run/0: jumping to instruction 19
-run/0: instruction write/20
-run/0: reply/33 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "same-as-ingredient": "0"]}
-mem/0: location 1041 is 1031
-run/0: result 0 is 1031
-mem/0: storing 1031 in location 1
-run/0: instruction run1001/2
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]}, {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]} <- read/111 {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]}
-mem/0: location 1 is 1031
-run/0: instruction read/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1132
-run/0: instruction read/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/30 
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1134
-run/0: instruction read/3
-run/0: {name: "empty", value: 2, type: 3, properties: ["empty": "boolean"]} <- channel-empty?/112 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]}
-mem/0: location 1134 is 1031
-run/0: instruction channel-empty?/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1163
-run/0: instruction channel-empty?/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/30 
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1165
-run/0: instruction channel-empty?/2
-run/0: {name: "full", value: 2, type: 1, properties: ["full": "integer"]} <- get/24 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
-run/0: ingredient 0 is chan
-mem/0: location 1165 is 1031
-run/0: ingredient 1 is first-full
-run/0: address to copy is 1031
-run/0: its type is 1
-mem/0: location 1031 is 0
-run/0: product 0 is 0
-mem/0: storing 0 in location 1166
-run/0: instruction channel-empty?/3
-run/0: {name: "free", value: 3, type: 1, properties: ["free": "integer"]} <- get/24 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
-run/0: ingredient 0 is chan
-mem/0: location 1165 is 1031
-run/0: ingredient 1 is first-free
-run/0: address to copy is 1032
-run/0: its type is 1
-mem/0: location 1032 is 1
-run/0: product 0 is 1
-mem/0: storing 1 in location 1167
-run/0: instruction channel-empty?/4
-run/0: {name: "result", value: 4, type: 3, properties: ["result": "boolean"]} <- equal/13 {name: "full", value: 2, type: 1, properties: ["full": "integer"]}, {name: "free", value: 3, type: 1, properties: ["free": "integer"]}
-run/0: ingredient 0 is full
-mem/0: location 1166 is 0
-run/0: ingredient 1 is free
-mem/0: location 1167 is 1
-run/0: product 0 is 0
-mem/0: storing 0 in location 1168
-run/0: instruction channel-empty?/5
-run/0: reply/33 {name: "result", value: 4, type: 3, properties: ["result": "boolean"]}
-mem/0: location 1168 is 0
-run/0: result 0 is 0
-mem/0: storing 0 in location 1135
-run/0: instruction read/4
-run/0: break-unless/12 {name: "empty", value: 2, type: 3, properties: ["empty": "boolean"]}, {name: "", value: 2, type: , properties: ["": ]}
-mem/0: location 1135 is 0
-run/0: ingredient 0 is 0
-run/0: ingredient 1 is 
-run/0: jumping to instruction 7
-run/0: instruction read/8
-run/0: {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer"]} <- get-address/25 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
-run/0: ingredient 0 is chan
-mem/0: location 1134 is 1031
-run/0: ingredient 1 is first-full
-run/0: address to copy is 1031
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1137
-run/0: instruction read/9
-run/0: {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location"]} <- get/24 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is chan
-mem/0: location 1134 is 1031
-run/0: ingredient 1 is data
-run/0: address to copy is 1033
-run/0: its type is 2
-mem/0: location 1033 is 1034
-run/0: product 0 is 1034
-mem/0: storing 1034 in location 1138
-run/0: instruction read/10
-run/0: {name: "result", value: 6, type: 1, properties: ["result": "location"]} <- index/26 {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}, {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer", "deref": ]}
-run/0: ingredient 0 is {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}
-mem/0: location 1138 is 1034
-run/0: ingredient 1 is {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer", "deref": ]}
-mem/0: location 1137 is 1031
-mem/0: location 1031 is 0
-run/0: address to copy is 1035
-run/0: its type is 1
-mem/0: location 1035 is 34
-run/0: product 0 is 34
-mem/0: storing 34 in location 1139
-run/0: instruction read/11
-run/0: {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer", "deref": ]} <- add/2 {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is full
-mem/0: location 1137 is 1031
-mem/0: location 1031 is 0
-run/0: ingredient 1 is 1
-run/0: product 0 is 1
-mem/0: location 1137 is 1031
-mem/0: storing 1 in location 1031
-run/0: instruction read/13
-run/0: {name: "len", value: 7, type: 1, properties: ["len": "integer"]} <- length/28 {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}
-mem/0: location 1138 is 1034
-mem/0: storing 4 in location 1140
-run/0: instruction read/14
-run/0: {name: "at-end?", value: 8, type: 3, properties: ["at-end?": "boolean"]} <- greater-or-equal/16 {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer", "deref": ]}, {name: "len", value: 7, type: 1, properties: ["len": "integer"]}
-run/0: ingredient 0 is full
-mem/0: location 1137 is 1031
-mem/0: location 1031 is 1
-run/0: ingredient 1 is len
-mem/0: location 1140 is 4
-run/0: product 0 is 0
-mem/0: storing 0 in location 1141
-run/0: instruction read/15
-run/0: break-unless/12 {name: "at-end?", value: 8, type: 3, properties: ["at-end?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
-mem/0: location 1141 is 0
-run/0: ingredient 0 is 0
-run/0: ingredient 1 is 
-run/0: jumping to instruction 17
-run/0: instruction read/18
-run/0: reply/33 {name: "result", value: 6, type: 1, properties: ["result": "location"]}, {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "same-as-ingredient": "0"]}
-mem/0: location 1139 is 34
-mem/0: location 1134 is 1031
-run/0: result 0 is 34
-mem/0: storing 34 in location 2
-run/0: result 1 is 1031
-mem/0: storing 1031 in location 1
-run/0: instruction channel/1
-run/0: memory-should-contain/46 {name: "
-    2 <- 34
-  ", value: 0, type: 0, properties: ["
-    2 <- 34
-  ": "literal-string"]}
-run/0: checking location 2
diff --git a/cpp/.traces/channel-initialization b/cpp/.traces/channel-initialization
deleted file mode 100644
index cb6d3026..00000000
--- a/cpp/.traces/channel-initialization
+++ /dev/null
@@ -1,147 +0,0 @@
-parse/0: instruction: run
-parse/0:   ingredient: {name: "
-    1:address:channel <- init-channel 3:literal/capacity
-    2:integer <- get 1:address:channel/deref, first-full:offset
-    3:integer <- get 1:address:channel/deref, first-free:offset
-  ", value: 0, type: 0, properties: ["
-    1:address:channel <- init-channel 3:literal/capacity
-    2:integer <- get 1:address:channel/deref, first-full:offset
-    3:integer <- get 1:address:channel/deref, first-free:offset
-  ": "literal-string"]}
-parse/0: instruction: memory-should-contain
-parse/0:   ingredient: {name: "
-    2 <- 0  # first-full
-    3 <- 0  # first-free
-  ", value: 0, type: 0, properties: ["
-    2 <- 0  # first-full
-    3 <- 0  # first-free
-  ": "literal-string"]}
-after-brace/0: recipe channel-initialization
-after-brace/0: run ...
-after-brace/0: memory-should-contain ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: channel-initialization
-run/0: instruction channel-initialization/0
-run/0: run/45 {name: "
-    1:address:channel <- init-channel 3:literal/capacity
-    2:integer <- get 1:address:channel/deref, first-full:offset
-    3:integer <- get 1:address:channel/deref, first-free:offset
-  ", value: 0, type: 0, properties: ["
-    1:address:channel <- init-channel 3:literal/capacity
-    2:integer <- get 1:address:channel/deref, first-full:offset
-    3:integer <- get 1:address:channel/deref, first-free:offset
-  ": "literal-string"]}
-parse/0: instruction: init-channel
-parse/0:   ingredient: {name: "3", value: 0, type: 0, properties: ["3": "literal", "capacity": ]}
-parse/0:   product: {name: "1", value: 0, type: 2-10, properties: ["1": "address":"channel"]}
-parse/0: instruction: get
-parse/0:   ingredient: {name: "1", value: 0, type: 2-10, properties: ["1": "address":"channel", "deref": ]}
-parse/0:   ingredient: {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
-parse/0:   product: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-parse/0: instruction: get
-parse/0:   ingredient: {name: "1", value: 0, type: 2-10, properties: ["1": "address":"channel", "deref": ]}
-parse/0:   ingredient: {name: "first-free", value: 0, type: 0, properties: ["first-free": "offset"]}
-parse/0:   product: {name: "3", value: 0, type: 1, properties: ["3": "integer"]}
-name/0: element first-full of type channel is at offset 0
-name/0: element first-free of type channel is at offset 1
-after-brace/0: recipe run1001
-after-brace/0: init-channel ...
-after-brace/0: get ...
-after-brace/0: get ...
-run/0: instruction run1001/0
-run/0: {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]} <- init-channel/108 {name: "3", value: 3, type: 0, properties: ["3": "literal", "capacity": ]}
-run/0: instruction init-channel/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1000
-run/0: instruction init-channel/1
-run/0: {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel"]} <- new/44 {name: "channel", value: 10, type: 0, properties: ["channel": "type"]}
-mem/0: new alloc: 1031
-mem/0: storing 1031 in location 1002
-run/0: instruction init-channel/2
-run/0: {name: "full", value: 2, type: 2-1, properties: ["full": "address":"integer"]} <- get-address/25 {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
-run/0: ingredient 0 is result
-mem/0: location 1002 is 1031
-run/0: ingredient 1 is first-full
-run/0: address to copy is 1031
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1003
-run/0: instruction init-channel/3
-run/0: {name: "full", value: 2, type: 2-1, properties: ["full": "address":"integer", "deref": ]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
-mem/0: location 1003 is 1031
-mem/0: storing 0 in location 1031
-run/0: instruction init-channel/4
-run/0: {name: "free", value: 3, type: 2-1, properties: ["free": "address":"integer"]} <- get-address/25 {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
-run/0: ingredient 0 is result
-mem/0: location 1002 is 1031
-run/0: ingredient 1 is first-free
-run/0: address to copy is 1032
-run/0: product 0 is 1032
-mem/0: storing 1032 in location 1004
-run/0: instruction init-channel/5
-run/0: {name: "free", value: 3, type: 2-1, properties: ["free": "address":"integer", "deref": ]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
-mem/0: location 1004 is 1032
-mem/0: storing 0 in location 1032
-run/0: instruction init-channel/6
-run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- next-ingredient/30 
-run/0: product 0 is 3
-mem/0: storing 3 in location 1005
-run/0: instruction init-channel/7
-run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- add/2 {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is capacity
-mem/0: location 1005 is 3
-run/0: ingredient 1 is 1
-run/0: product 0 is 4
-mem/0: storing 4 in location 1005
-run/0: instruction init-channel/8
-run/0: {name: "dest", value: 5, type: 2-2-5-1, properties: ["dest": "address":"address":"array":"location"]} <- get-address/25 {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is result
-mem/0: location 1002 is 1031
-run/0: ingredient 1 is data
-run/0: address to copy is 1033
-run/0: product 0 is 1033
-mem/0: storing 1033 in location 1006
-run/0: instruction init-channel/9
-run/0: {name: "dest", value: 5, type: 2-2-5-1, properties: ["dest": "address":"address":"array":"location", "deref": ]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}
-mem/0: location 1005 is 4
-mem/0: array size is 4
-mem/0: new alloc: 1034
-mem/0: location 1006 is 1033
-mem/0: storing 1034 in location 1033
-run/0: instruction init-channel/10
-run/0: reply/33 {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel"]}
-mem/0: location 1002 is 1031
-run/0: result 0 is 1031
-mem/0: storing 1031 in location 1
-run/0: instruction run1001/1
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- get/24 {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
-run/0: ingredient 0 is 1
-mem/0: location 1 is 1031
-run/0: ingredient 1 is first-full
-run/0: address to copy is 1031
-run/0: its type is 1
-mem/0: location 1031 is 0
-run/0: product 0 is 0
-mem/0: storing 0 in location 2
-run/0: instruction run1001/2
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- get/24 {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
-run/0: ingredient 0 is 1
-mem/0: location 1 is 1031
-run/0: ingredient 1 is first-free
-run/0: address to copy is 1032
-run/0: its type is 1
-mem/0: location 1032 is 0
-run/0: product 0 is 0
-mem/0: storing 0 in location 3
-run/0: instruction channel-initialization/1
-run/0: memory-should-contain/46 {name: "
-    2 <- 0  # first-full
-    3 <- 0  # first-free
-  ", value: 0, type: 0, properties: ["
-    2 <- 0  # first-full
-    3 <- 0  # first-free
-  ": "literal-string"]}
-run/0: checking location 2
-run/0: checking location 3
diff --git a/cpp/.traces/channel-new-empty-not-full b/cpp/.traces/channel-new-empty-not-full
deleted file mode 100644
index e0a165c2..00000000
--- a/cpp/.traces/channel-new-empty-not-full
+++ /dev/null
@@ -1,262 +0,0 @@
-parse/0: instruction: run
-parse/0:   ingredient: {name: "
-    1:address:channel <- init-channel 3:literal/capacity
-    2:integer <- channel-empty? 1:address:channel
-    3:integer <- channel-full? 1:address:channel
-  ", value: 0, type: 0, properties: ["
-    1:address:channel <- init-channel 3:literal/capacity
-    2:integer <- channel-empty? 1:address:channel
-    3:integer <- channel-full? 1:address:channel
-  ": "literal-string"]}
-parse/0: instruction: memory-should-contain
-parse/0:   ingredient: {name: "
-    2 <- 1  # empty?
-    3 <- 0  # full?
-  ", value: 0, type: 0, properties: ["
-    2 <- 1  # empty?
-    3 <- 0  # full?
-  ": "literal-string"]}
-after-brace/0: recipe channel-new-empty-not-full
-after-brace/0: run ...
-after-brace/0: memory-should-contain ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: channel-new-empty-not-full
-run/0: instruction channel-new-empty-not-full/0
-run/0: run/45 {name: "
-    1:address:channel <- init-channel 3:literal/capacity
-    2:integer <- channel-empty? 1:address:channel
-    3:integer <- channel-full? 1:address:channel
-  ", value: 0, type: 0, properties: ["
-    1:address:channel <- init-channel 3:literal/capacity
-    2:integer <- channel-empty? 1:address:channel
-    3:integer <- channel-full? 1:address:channel
-  ": "literal-string"]}
-parse/0: instruction: init-channel
-parse/0:   ingredient: {name: "3", value: 0, type: 0, properties: ["3": "literal", "capacity": ]}
-parse/0:   product: {name: "1", value: 0, type: 2-10, properties: ["1": "address":"channel"]}
-parse/0: instruction: channel-empty?
-parse/0:   ingredient: {name: "1", value: 0, type: 2-10, properties: ["1": "address":"channel"]}
-parse/0:   product: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-parse/0: instruction: channel-full?
-parse/0:   ingredient: {name: "1", value: 0, type: 2-10, properties: ["1": "address":"channel"]}
-parse/0:   product: {name: "3", value: 0, type: 1, properties: ["3": "integer"]}
-after-brace/0: recipe run1001
-after-brace/0: init-channel ...
-after-brace/0: channel-empty? ...
-after-brace/0: channel-full? ...
-run/0: instruction run1001/0
-run/0: {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]} <- init-channel/108 {name: "3", value: 3, type: 0, properties: ["3": "literal", "capacity": ]}
-run/0: instruction init-channel/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1000
-run/0: instruction init-channel/1
-run/0: {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel"]} <- new/44 {name: "channel", value: 10, type: 0, properties: ["channel": "type"]}
-mem/0: new alloc: 1031
-mem/0: storing 1031 in location 1002
-run/0: instruction init-channel/2
-run/0: {name: "full", value: 2, type: 2-1, properties: ["full": "address":"integer"]} <- get-address/25 {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
-run/0: ingredient 0 is result
-mem/0: location 1002 is 1031
-run/0: ingredient 1 is first-full
-run/0: address to copy is 1031
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1003
-run/0: instruction init-channel/3
-run/0: {name: "full", value: 2, type: 2-1, properties: ["full": "address":"integer", "deref": ]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
-mem/0: location 1003 is 1031
-mem/0: storing 0 in location 1031
-run/0: instruction init-channel/4
-run/0: {name: "free", value: 3, type: 2-1, properties: ["free": "address":"integer"]} <- get-address/25 {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
-run/0: ingredient 0 is result
-mem/0: location 1002 is 1031
-run/0: ingredient 1 is first-free
-run/0: address to copy is 1032
-run/0: product 0 is 1032
-mem/0: storing 1032 in location 1004
-run/0: instruction init-channel/5
-run/0: {name: "free", value: 3, type: 2-1, properties: ["free": "address":"integer", "deref": ]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
-mem/0: location 1004 is 1032
-mem/0: storing 0 in location 1032
-run/0: instruction init-channel/6
-run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- next-ingredient/30 
-run/0: product 0 is 3
-mem/0: storing 3 in location 1005
-run/0: instruction init-channel/7
-run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- add/2 {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is capacity
-mem/0: location 1005 is 3
-run/0: ingredient 1 is 1
-run/0: product 0 is 4
-mem/0: storing 4 in location 1005
-run/0: instruction init-channel/8
-run/0: {name: "dest", value: 5, type: 2-2-5-1, properties: ["dest": "address":"address":"array":"location"]} <- get-address/25 {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is result
-mem/0: location 1002 is 1031
-run/0: ingredient 1 is data
-run/0: address to copy is 1033
-run/0: product 0 is 1033
-mem/0: storing 1033 in location 1006
-run/0: instruction init-channel/9
-run/0: {name: "dest", value: 5, type: 2-2-5-1, properties: ["dest": "address":"address":"array":"location", "deref": ]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}
-mem/0: location 1005 is 4
-mem/0: array size is 4
-mem/0: new alloc: 1034
-mem/0: location 1006 is 1033
-mem/0: storing 1034 in location 1033
-run/0: instruction init-channel/10
-run/0: reply/33 {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel"]}
-mem/0: location 1002 is 1031
-run/0: result 0 is 1031
-mem/0: storing 1031 in location 1
-run/0: instruction run1001/1
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- channel-empty?/112 {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]}
-mem/0: location 1 is 1031
-run/0: instruction channel-empty?/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1039
-run/0: instruction channel-empty?/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/30 
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1041
-run/0: instruction channel-empty?/2
-run/0: {name: "full", value: 2, type: 1, properties: ["full": "integer"]} <- get/24 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
-run/0: ingredient 0 is chan
-mem/0: location 1041 is 1031
-run/0: ingredient 1 is first-full
-run/0: address to copy is 1031
-run/0: its type is 1
-mem/0: location 1031 is 0
-run/0: product 0 is 0
-mem/0: storing 0 in location 1042
-run/0: instruction channel-empty?/3
-run/0: {name: "free", value: 3, type: 1, properties: ["free": "integer"]} <- get/24 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
-run/0: ingredient 0 is chan
-mem/0: location 1041 is 1031
-run/0: ingredient 1 is first-free
-run/0: address to copy is 1032
-run/0: its type is 1
-mem/0: location 1032 is 0
-run/0: product 0 is 0
-mem/0: storing 0 in location 1043
-run/0: instruction channel-empty?/4
-run/0: {name: "result", value: 4, type: 3, properties: ["result": "boolean"]} <- equal/13 {name: "full", value: 2, type: 1, properties: ["full": "integer"]}, {name: "free", value: 3, type: 1, properties: ["free": "integer"]}
-run/0: ingredient 0 is full
-mem/0: location 1042 is 0
-run/0: ingredient 1 is free
-mem/0: location 1043 is 0
-run/0: product 0 is 1
-mem/0: storing 1 in location 1044
-run/0: instruction channel-empty?/5
-run/0: reply/33 {name: "result", value: 4, type: 3, properties: ["result": "boolean"]}
-mem/0: location 1044 is 1
-run/0: result 0 is 1
-mem/0: storing 1 in location 2
-run/0: instruction run1001/2
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- channel-full?/110 {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]}
-mem/0: location 1 is 1031
-run/0: instruction channel-full?/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1070
-run/0: instruction channel-full?/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/30 
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1072
-run/0: instruction channel-full?/2
-run/0: {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]} <- get/24 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
-run/0: ingredient 0 is chan
-mem/0: location 1072 is 1031
-run/0: ingredient 1 is first-free
-run/0: address to copy is 1032
-run/0: its type is 1
-mem/0: location 1032 is 0
-run/0: product 0 is 0
-mem/0: storing 0 in location 1073
-run/0: instruction channel-full?/3
-run/0: {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]} <- add/2 {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is tmp
-mem/0: location 1073 is 0
-run/0: ingredient 1 is 1
-run/0: product 0 is 1
-mem/0: storing 1 in location 1073
-run/0: instruction channel-full?/5
-run/0: {name: "len", value: 3, type: 1, properties: ["len": "integer"]} <- channel-capacity/113 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]}
-mem/0: location 1072 is 1031
-run/0: instruction channel-capacity/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1101
-run/0: instruction channel-capacity/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/30 
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1103
-run/0: instruction channel-capacity/2
-run/0: {name: "q", value: 2, type: 2-5-1, properties: ["q": "address":"array":"location"]} <- get/24 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is chan
-mem/0: location 1103 is 1031
-run/0: ingredient 1 is data
-run/0: address to copy is 1033
-run/0: its type is 2
-mem/0: location 1033 is 1034
-run/0: product 0 is 1034
-mem/0: storing 1034 in location 1104
-run/0: instruction channel-capacity/3
-run/0: {name: "result", value: 3, type: 1, properties: ["result": "integer"]} <- length/28 {name: "q", value: 2, type: 2-5-1, properties: ["q": "address":"array":"location", "deref": ]}
-mem/0: location 1104 is 1034
-mem/0: storing 4 in location 1105
-run/0: instruction channel-capacity/4
-run/0: reply/33 {name: "result", value: 3, type: 1, properties: ["result": "integer"]}
-mem/0: location 1105 is 4
-run/0: result 0 is 4
-mem/0: storing 4 in location 1074
-run/0: instruction channel-full?/6
-run/0: {name: "at-end?", value: 4, type: 3, properties: ["at-end?": "boolean"]} <- greater-or-equal/16 {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}, {name: "len", value: 3, type: 1, properties: ["len": "integer"]}
-run/0: ingredient 0 is tmp
-mem/0: location 1073 is 1
-run/0: ingredient 1 is len
-mem/0: location 1074 is 4
-run/0: product 0 is 0
-mem/0: storing 0 in location 1075
-run/0: instruction channel-full?/7
-run/0: break-unless/12 {name: "at-end?", value: 4, type: 3, properties: ["at-end?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
-mem/0: location 1075 is 0
-run/0: ingredient 0 is 0
-run/0: ingredient 1 is 
-run/0: jumping to instruction 9
-run/0: instruction channel-full?/10
-run/0: {name: "full", value: 5, type: 1, properties: ["full": "integer"]} <- get/24 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
-run/0: ingredient 0 is chan
-mem/0: location 1072 is 1031
-run/0: ingredient 1 is first-full
-run/0: address to copy is 1031
-run/0: its type is 1
-mem/0: location 1031 is 0
-run/0: product 0 is 0
-mem/0: storing 0 in location 1076
-run/0: instruction channel-full?/11
-run/0: {name: "result", value: 6, type: 3, properties: ["result": "boolean"]} <- equal/13 {name: "full", value: 5, type: 1, properties: ["full": "integer"]}, {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}
-run/0: ingredient 0 is full
-mem/0: location 1076 is 0
-run/0: ingredient 1 is tmp
-mem/0: location 1073 is 1
-run/0: product 0 is 0
-mem/0: storing 0 in location 1077
-run/0: instruction channel-full?/12
-run/0: reply/33 {name: "result", value: 6, type: 3, properties: ["result": "boolean"]}
-mem/0: location 1077 is 0
-run/0: result 0 is 0
-mem/0: storing 0 in location 3
-run/0: instruction channel-new-empty-not-full/1
-run/0: memory-should-contain/46 {name: "
-    2 <- 1  # empty?
-    3 <- 0  # full?
-  ", value: 0, type: 0, properties: ["
-    2 <- 1  # empty?
-    3 <- 0  # full?
-  ": "literal-string"]}
-run/0: checking location 2
-run/0: checking location 3
diff --git a/cpp/.traces/channel-read-increments-full b/cpp/.traces/channel-read-increments-full
deleted file mode 100644
index 61cc50a4..00000000
--- a/cpp/.traces/channel-read-increments-full
+++ /dev/null
@@ -1,474 +0,0 @@
-parse/0: instruction: run
-parse/0:   ingredient: {name: "
-    1:address:channel <- init-channel 3:literal/capacity
-    1:address:channel <- write 1:address:channel, 34:literal
-    _, 1:address:channel <- read 1:address:channel
-    2:integer <- get 1:address:channel/deref, first-full:offset
-    3:integer <- get 1:address:channel/deref, first-free:offset
-  ", value: 0, type: 0, properties: ["
-    1:address:channel <- init-channel 3:literal/capacity
-    1:address:channel <- write 1:address:channel, 34:literal
-    _, 1:address:channel <- read 1:address:channel
-    2:integer <- get 1:address:channel/deref, first-full:offset
-    3:integer <- get 1:address:channel/deref, first-free:offset
-  ": "literal-string"]}
-parse/0: instruction: memory-should-contain
-parse/0:   ingredient: {name: "
-    2 <- 1  # first-full
-    3 <- 1  # first-free
-  ", value: 0, type: 0, properties: ["
-    2 <- 1  # first-full
-    3 <- 1  # first-free
-  ": "literal-string"]}
-after-brace/0: recipe channel-read-increments-full
-after-brace/0: run ...
-after-brace/0: memory-should-contain ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: channel-read-increments-full
-run/0: instruction channel-read-increments-full/0
-run/0: run/45 {name: "
-    1:address:channel <- init-channel 3:literal/capacity
-    1:address:channel <- write 1:address:channel, 34:literal
-    _, 1:address:channel <- read 1:address:channel
-    2:integer <- get 1:address:channel/deref, first-full:offset
-    3:integer <- get 1:address:channel/deref, first-free:offset
-  ", value: 0, type: 0, properties: ["
-    1:address:channel <- init-channel 3:literal/capacity
-    1:address:channel <- write 1:address:channel, 34:literal
-    _, 1:address:channel <- read 1:address:channel
-    2:integer <- get 1:address:channel/deref, first-full:offset
-    3:integer <- get 1:address:channel/deref, first-free:offset
-  ": "literal-string"]}
-parse/0: instruction: init-channel
-parse/0:   ingredient: {name: "3", value: 0, type: 0, properties: ["3": "literal", "capacity": ]}
-parse/0:   product: {name: "1", value: 0, type: 2-10, properties: ["1": "address":"channel"]}
-parse/0: instruction: write
-parse/0:   ingredient: {name: "1", value: 0, type: 2-10, properties: ["1": "address":"channel"]}
-parse/0:   ingredient: {name: "34", value: 0, type: 0, properties: ["34": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 2-10, properties: ["1": "address":"channel"]}
-parse/0: instruction: read
-parse/0:   ingredient: {name: "1", value: 0, type: 2-10, properties: ["1": "address":"channel"]}
-parse/0:   product: {name: "_", value: 0, type: 0, properties: ["_": "dummy"]}
-parse/0:   product: {name: "1", value: 0, type: 2-10, properties: ["1": "address":"channel"]}
-parse/0: instruction: get
-parse/0:   ingredient: {name: "1", value: 0, type: 2-10, properties: ["1": "address":"channel", "deref": ]}
-parse/0:   ingredient: {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
-parse/0:   product: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-parse/0: instruction: get
-parse/0:   ingredient: {name: "1", value: 0, type: 2-10, properties: ["1": "address":"channel", "deref": ]}
-parse/0:   ingredient: {name: "first-free", value: 0, type: 0, properties: ["first-free": "offset"]}
-parse/0:   product: {name: "3", value: 0, type: 1, properties: ["3": "integer"]}
-name/0: element first-full of type channel is at offset 0
-name/0: element first-free of type channel is at offset 1
-after-brace/0: recipe run1001
-after-brace/0: init-channel ...
-after-brace/0: write ...
-after-brace/0: read ...
-after-brace/0: get ...
-after-brace/0: get ...
-run/0: instruction run1001/0
-run/0: {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]} <- init-channel/108 {name: "3", value: 3, type: 0, properties: ["3": "literal", "capacity": ]}
-run/0: instruction init-channel/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1000
-run/0: instruction init-channel/1
-run/0: {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel"]} <- new/44 {name: "channel", value: 10, type: 0, properties: ["channel": "type"]}
-mem/0: new alloc: 1031
-mem/0: storing 1031 in location 1002
-run/0: instruction init-channel/2
-run/0: {name: "full", value: 2, type: 2-1, properties: ["full": "address":"integer"]} <- get-address/25 {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
-run/0: ingredient 0 is result
-mem/0: location 1002 is 1031
-run/0: ingredient 1 is first-full
-run/0: address to copy is 1031
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1003
-run/0: instruction init-channel/3
-run/0: {name: "full", value: 2, type: 2-1, properties: ["full": "address":"integer", "deref": ]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
-mem/0: location 1003 is 1031
-mem/0: storing 0 in location 1031
-run/0: instruction init-channel/4
-run/0: {name: "free", value: 3, type: 2-1, properties: ["free": "address":"integer"]} <- get-address/25 {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
-run/0: ingredient 0 is result
-mem/0: location 1002 is 1031
-run/0: ingredient 1 is first-free
-run/0: address to copy is 1032
-run/0: product 0 is 1032
-mem/0: storing 1032 in location 1004
-run/0: instruction init-channel/5
-run/0: {name: "free", value: 3, type: 2-1, properties: ["free": "address":"integer", "deref": ]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
-mem/0: location 1004 is 1032
-mem/0: storing 0 in location 1032
-run/0: instruction init-channel/6
-run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- next-ingredient/30 
-run/0: product 0 is 3
-mem/0: storing 3 in location 1005
-run/0: instruction init-channel/7
-run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- add/2 {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is capacity
-mem/0: location 1005 is 3
-run/0: ingredient 1 is 1
-run/0: product 0 is 4
-mem/0: storing 4 in location 1005
-run/0: instruction init-channel/8
-run/0: {name: "dest", value: 5, type: 2-2-5-1, properties: ["dest": "address":"address":"array":"location"]} <- get-address/25 {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is result
-mem/0: location 1002 is 1031
-run/0: ingredient 1 is data
-run/0: address to copy is 1033
-run/0: product 0 is 1033
-mem/0: storing 1033 in location 1006
-run/0: instruction init-channel/9
-run/0: {name: "dest", value: 5, type: 2-2-5-1, properties: ["dest": "address":"address":"array":"location", "deref": ]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}
-mem/0: location 1005 is 4
-mem/0: array size is 4
-mem/0: new alloc: 1034
-mem/0: location 1006 is 1033
-mem/0: storing 1034 in location 1033
-run/0: instruction init-channel/10
-run/0: reply/33 {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel"]}
-mem/0: location 1002 is 1031
-run/0: result 0 is 1031
-mem/0: storing 1031 in location 1
-run/0: instruction run1001/1
-run/0: {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]} <- write/109 {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]}, {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
-mem/0: location 1 is 1031
-run/0: instruction write/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1039
-run/0: instruction write/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/30 
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1041
-run/0: instruction write/2
-run/0: {name: "val", value: 2, type: 1, properties: ["val": "location"]} <- next-ingredient/30 
-run/0: product 0 is 34
-mem/0: storing 34 in location 1042
-run/0: instruction write/4
-run/0: {name: "full", value: 3, type: 3, properties: ["full": "boolean"]} <- channel-full?/110 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]}
-mem/0: location 1041 is 1031
-run/0: instruction channel-full?/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1070
-run/0: instruction channel-full?/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/30 
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1072
-run/0: instruction channel-full?/2
-run/0: {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]} <- get/24 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
-run/0: ingredient 0 is chan
-mem/0: location 1072 is 1031
-run/0: ingredient 1 is first-free
-run/0: address to copy is 1032
-run/0: its type is 1
-mem/0: location 1032 is 0
-run/0: product 0 is 0
-mem/0: storing 0 in location 1073
-run/0: instruction channel-full?/3
-run/0: {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]} <- add/2 {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is tmp
-mem/0: location 1073 is 0
-run/0: ingredient 1 is 1
-run/0: product 0 is 1
-mem/0: storing 1 in location 1073
-run/0: instruction channel-full?/5
-run/0: {name: "len", value: 3, type: 1, properties: ["len": "integer"]} <- channel-capacity/113 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]}
-mem/0: location 1072 is 1031
-run/0: instruction channel-capacity/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1101
-run/0: instruction channel-capacity/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/30 
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1103
-run/0: instruction channel-capacity/2
-run/0: {name: "q", value: 2, type: 2-5-1, properties: ["q": "address":"array":"location"]} <- get/24 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is chan
-mem/0: location 1103 is 1031
-run/0: ingredient 1 is data
-run/0: address to copy is 1033
-run/0: its type is 2
-mem/0: location 1033 is 1034
-run/0: product 0 is 1034
-mem/0: storing 1034 in location 1104
-run/0: instruction channel-capacity/3
-run/0: {name: "result", value: 3, type: 1, properties: ["result": "integer"]} <- length/28 {name: "q", value: 2, type: 2-5-1, properties: ["q": "address":"array":"location", "deref": ]}
-mem/0: location 1104 is 1034
-mem/0: storing 4 in location 1105
-run/0: instruction channel-capacity/4
-run/0: reply/33 {name: "result", value: 3, type: 1, properties: ["result": "integer"]}
-mem/0: location 1105 is 4
-run/0: result 0 is 4
-mem/0: storing 4 in location 1074
-run/0: instruction channel-full?/6
-run/0: {name: "at-end?", value: 4, type: 3, properties: ["at-end?": "boolean"]} <- greater-or-equal/16 {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}, {name: "len", value: 3, type: 1, properties: ["len": "integer"]}
-run/0: ingredient 0 is tmp
-mem/0: location 1073 is 1
-run/0: ingredient 1 is len
-mem/0: location 1074 is 4
-run/0: product 0 is 0
-mem/0: storing 0 in location 1075
-run/0: instruction channel-full?/7
-run/0: break-unless/12 {name: "at-end?", value: 4, type: 3, properties: ["at-end?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
-mem/0: location 1075 is 0
-run/0: ingredient 0 is 0
-run/0: ingredient 1 is 
-run/0: jumping to instruction 9
-run/0: instruction channel-full?/10
-run/0: {name: "full", value: 5, type: 1, properties: ["full": "integer"]} <- get/24 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
-run/0: ingredient 0 is chan
-mem/0: location 1072 is 1031
-run/0: ingredient 1 is first-full
-run/0: address to copy is 1031
-run/0: its type is 1
-mem/0: location 1031 is 0
-run/0: product 0 is 0
-mem/0: storing 0 in location 1076
-run/0: instruction channel-full?/11
-run/0: {name: "result", value: 6, type: 3, properties: ["result": "boolean"]} <- equal/13 {name: "full", value: 5, type: 1, properties: ["full": "integer"]}, {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}
-run/0: ingredient 0 is full
-mem/0: location 1076 is 0
-run/0: ingredient 1 is tmp
-mem/0: location 1073 is 1
-run/0: product 0 is 0
-mem/0: storing 0 in location 1077
-run/0: instruction channel-full?/12
-run/0: reply/33 {name: "result", value: 6, type: 3, properties: ["result": "boolean"]}
-mem/0: location 1077 is 0
-run/0: result 0 is 0
-mem/0: storing 0 in location 1043
-run/0: instruction write/5
-run/0: break-unless/12 {name: "full", value: 3, type: 3, properties: ["full": "boolean"]}, {name: "", value: 2, type: , properties: ["": ]}
-mem/0: location 1043 is 0
-run/0: ingredient 0 is 0
-run/0: ingredient 1 is 
-run/0: jumping to instruction 8
-run/0: instruction write/9
-run/0: {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location"]} <- get/24 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is chan
-mem/0: location 1041 is 1031
-run/0: ingredient 1 is data
-run/0: address to copy is 1033
-run/0: its type is 2
-mem/0: location 1033 is 1034
-run/0: product 0 is 1034
-mem/0: storing 1034 in location 1045
-run/0: instruction write/10
-run/0: {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer"]} <- get-address/25 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
-run/0: ingredient 0 is chan
-mem/0: location 1041 is 1031
-run/0: ingredient 1 is first-free
-run/0: address to copy is 1032
-run/0: product 0 is 1032
-mem/0: storing 1032 in location 1046
-run/0: instruction write/11
-run/0: {name: "dest", value: 7, type: 2-1, properties: ["dest": "address":"location"]} <- index-address/27 {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}, {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}
-run/0: ingredient 0 is circular-buffer
-mem/0: location 1045 is 1034
-run/0: ingredient 1 is {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}
-mem/0: location 1046 is 1032
-mem/0: location 1032 is 0
-run/0: address to copy is 1035
-run/0: product 0 is 1035
-mem/0: storing 1035 in location 1047
-run/0: instruction write/12
-run/0: {name: "dest", value: 7, type: 2-1, properties: ["dest": "address":"location", "deref": ]} <- copy/1 {name: "val", value: 2, type: 1, properties: ["val": "location"]}
-run/0: ingredient 0 is val
-mem/0: location 1042 is 34
-mem/0: location 1047 is 1035
-mem/0: storing 34 in location 1035
-run/0: instruction write/13
-run/0: {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]} <- add/2 {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is free
-mem/0: location 1046 is 1032
-mem/0: location 1032 is 0
-run/0: ingredient 1 is 1
-run/0: product 0 is 1
-mem/0: location 1046 is 1032
-mem/0: storing 1 in location 1032
-run/0: instruction write/15
-run/0: {name: "len", value: 8, type: 1, properties: ["len": "integer"]} <- length/28 {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}
-mem/0: location 1045 is 1034
-mem/0: storing 4 in location 1048
-run/0: instruction write/16
-run/0: {name: "at-end?", value: 9, type: 3, properties: ["at-end?": "boolean"]} <- greater-or-equal/16 {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}, {name: "len", value: 8, type: 1, properties: ["len": "integer"]}
-run/0: ingredient 0 is free
-mem/0: location 1046 is 1032
-mem/0: location 1032 is 1
-run/0: ingredient 1 is len
-mem/0: location 1048 is 4
-run/0: product 0 is 0
-mem/0: storing 0 in location 1049
-run/0: instruction write/17
-run/0: break-unless/12 {name: "at-end?", value: 9, type: 3, properties: ["at-end?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
-mem/0: location 1049 is 0
-run/0: ingredient 0 is 0
-run/0: ingredient 1 is 
-run/0: jumping to instruction 19
-run/0: instruction write/20
-run/0: reply/33 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "same-as-ingredient": "0"]}
-mem/0: location 1041 is 1031
-run/0: result 0 is 1031
-mem/0: storing 1031 in location 1
-run/0: instruction run1001/2
-run/0: {name: "_", value: 0, type: 0, properties: ["_": "dummy"]}, {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]} <- read/111 {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]}
-mem/0: location 1 is 1031
-run/0: instruction read/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1132
-run/0: instruction read/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/30 
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1134
-run/0: instruction read/3
-run/0: {name: "empty", value: 2, type: 3, properties: ["empty": "boolean"]} <- channel-empty?/112 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]}
-mem/0: location 1134 is 1031
-run/0: instruction channel-empty?/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1163
-run/0: instruction channel-empty?/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/30 
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1165
-run/0: instruction channel-empty?/2
-run/0: {name: "full", value: 2, type: 1, properties: ["full": "integer"]} <- get/24 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
-run/0: ingredient 0 is chan
-mem/0: location 1165 is 1031
-run/0: ingredient 1 is first-full
-run/0: address to copy is 1031
-run/0: its type is 1
-mem/0: location 1031 is 0
-run/0: product 0 is 0
-mem/0: storing 0 in location 1166
-run/0: instruction channel-empty?/3
-run/0: {name: "free", value: 3, type: 1, properties: ["free": "integer"]} <- get/24 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
-run/0: ingredient 0 is chan
-mem/0: location 1165 is 1031
-run/0: ingredient 1 is first-free
-run/0: address to copy is 1032
-run/0: its type is 1
-mem/0: location 1032 is 1
-run/0: product 0 is 1
-mem/0: storing 1 in location 1167
-run/0: instruction channel-empty?/4
-run/0: {name: "result", value: 4, type: 3, properties: ["result": "boolean"]} <- equal/13 {name: "full", value: 2, type: 1, properties: ["full": "integer"]}, {name: "free", value: 3, type: 1, properties: ["free": "integer"]}
-run/0: ingredient 0 is full
-mem/0: location 1166 is 0
-run/0: ingredient 1 is free
-mem/0: location 1167 is 1
-run/0: product 0 is 0
-mem/0: storing 0 in location 1168
-run/0: instruction channel-empty?/5
-run/0: reply/33 {name: "result", value: 4, type: 3, properties: ["result": "boolean"]}
-mem/0: location 1168 is 0
-run/0: result 0 is 0
-mem/0: storing 0 in location 1135
-run/0: instruction read/4
-run/0: break-unless/12 {name: "empty", value: 2, type: 3, properties: ["empty": "boolean"]}, {name: "", value: 2, type: , properties: ["": ]}
-mem/0: location 1135 is 0
-run/0: ingredient 0 is 0
-run/0: ingredient 1 is 
-run/0: jumping to instruction 7
-run/0: instruction read/8
-run/0: {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer"]} <- get-address/25 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
-run/0: ingredient 0 is chan
-mem/0: location 1134 is 1031
-run/0: ingredient 1 is first-full
-run/0: address to copy is 1031
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1137
-run/0: instruction read/9
-run/0: {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location"]} <- get/24 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is chan
-mem/0: location 1134 is 1031
-run/0: ingredient 1 is data
-run/0: address to copy is 1033
-run/0: its type is 2
-mem/0: location 1033 is 1034
-run/0: product 0 is 1034
-mem/0: storing 1034 in location 1138
-run/0: instruction read/10
-run/0: {name: "result", value: 6, type: 1, properties: ["result": "location"]} <- index/26 {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}, {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer", "deref": ]}
-run/0: ingredient 0 is {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}
-mem/0: location 1138 is 1034
-run/0: ingredient 1 is {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer", "deref": ]}
-mem/0: location 1137 is 1031
-mem/0: location 1031 is 0
-run/0: address to copy is 1035
-run/0: its type is 1
-mem/0: location 1035 is 34
-run/0: product 0 is 34
-mem/0: storing 34 in location 1139
-run/0: instruction read/11
-run/0: {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer", "deref": ]} <- add/2 {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is full
-mem/0: location 1137 is 1031
-mem/0: location 1031 is 0
-run/0: ingredient 1 is 1
-run/0: product 0 is 1
-mem/0: location 1137 is 1031
-mem/0: storing 1 in location 1031
-run/0: instruction read/13
-run/0: {name: "len", value: 7, type: 1, properties: ["len": "integer"]} <- length/28 {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}
-mem/0: location 1138 is 1034
-mem/0: storing 4 in location 1140
-run/0: instruction read/14
-run/0: {name: "at-end?", value: 8, type: 3, properties: ["at-end?": "boolean"]} <- greater-or-equal/16 {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer", "deref": ]}, {name: "len", value: 7, type: 1, properties: ["len": "integer"]}
-run/0: ingredient 0 is full
-mem/0: location 1137 is 1031
-mem/0: location 1031 is 1
-run/0: ingredient 1 is len
-mem/0: location 1140 is 4
-run/0: product 0 is 0
-mem/0: storing 0 in location 1141
-run/0: instruction read/15
-run/0: break-unless/12 {name: "at-end?", value: 8, type: 3, properties: ["at-end?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
-mem/0: location 1141 is 0
-run/0: ingredient 0 is 0
-run/0: ingredient 1 is 
-run/0: jumping to instruction 17
-run/0: instruction read/18
-run/0: reply/33 {name: "result", value: 6, type: 1, properties: ["result": "location"]}, {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "same-as-ingredient": "0"]}
-mem/0: location 1139 is 34
-mem/0: location 1134 is 1031
-run/0: result 0 is 34
-run/0: result 1 is 1031
-mem/0: storing 1031 in location 1
-run/0: instruction run1001/3
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- get/24 {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
-run/0: ingredient 0 is 1
-mem/0: location 1 is 1031
-run/0: ingredient 1 is first-full
-run/0: address to copy is 1031
-run/0: its type is 1
-mem/0: location 1031 is 1
-run/0: product 0 is 1
-mem/0: storing 1 in location 2
-run/0: instruction run1001/4
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- get/24 {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
-run/0: ingredient 0 is 1
-mem/0: location 1 is 1031
-run/0: ingredient 1 is first-free
-run/0: address to copy is 1032
-run/0: its type is 1
-mem/0: location 1032 is 1
-run/0: product 0 is 1
-mem/0: storing 1 in location 3
-run/0: instruction channel-read-increments-full/1
-run/0: memory-should-contain/46 {name: "
-    2 <- 1  # first-full
-    3 <- 1  # first-free
-  ", value: 0, type: 0, properties: ["
-    2 <- 1  # first-full
-    3 <- 1  # first-free
-  ": "literal-string"]}
-run/0: checking location 2
-run/0: checking location 3
diff --git a/cpp/.traces/channel-read-not-full b/cpp/.traces/channel-read-not-full
deleted file mode 100644
index 4d9e19b2..00000000
--- a/cpp/.traces/channel-read-not-full
+++ /dev/null
@@ -1,592 +0,0 @@
-parse/0: instruction: run
-parse/0:   ingredient: {name: "
-    1:address:channel <- init-channel 1:literal/capacity
-    1:address:channel <- write 1:address:channel, 34:literal
-    _, 1:address:channel <- read 1:address:channel
-    2:integer <- channel-empty? 1:address:channel
-    3:integer <- channel-full? 1:address:channel
-  ", value: 0, type: 0, properties: ["
-    1:address:channel <- init-channel 1:literal/capacity
-    1:address:channel <- write 1:address:channel, 34:literal
-    _, 1:address:channel <- read 1:address:channel
-    2:integer <- channel-empty? 1:address:channel
-    3:integer <- channel-full? 1:address:channel
-  ": "literal-string"]}
-parse/0: instruction: memory-should-contain
-parse/0:   ingredient: {name: "
-    2 <- 1  # empty?
-    3 <- 0  # full?
-  ", value: 0, type: 0, properties: ["
-    2 <- 1  # empty?
-    3 <- 0  # full?
-  ": "literal-string"]}
-after-brace/0: recipe channel-read-not-full
-after-brace/0: run ...
-after-brace/0: memory-should-contain ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: channel-read-not-full
-run/0: instruction channel-read-not-full/0
-run/0: run/45 {name: "
-    1:address:channel <- init-channel 1:literal/capacity
-    1:address:channel <- write 1:address:channel, 34:literal
-    _, 1:address:channel <- read 1:address:channel
-    2:integer <- channel-empty? 1:address:channel
-    3:integer <- channel-full? 1:address:channel
-  ", value: 0, type: 0, properties: ["
-    1:address:channel <- init-channel 1:literal/capacity
-    1:address:channel <- write 1:address:channel, 34:literal
-    _, 1:address:channel <- read 1:address:channel
-    2:integer <- channel-empty? 1:address:channel
-    3:integer <- channel-full? 1:address:channel
-  ": "literal-string"]}
-parse/0: instruction: init-channel
-parse/0:   ingredient: {name: "1", value: 0, type: 0, properties: ["1": "literal", "capacity": ]}
-parse/0:   product: {name: "1", value: 0, type: 2-10, properties: ["1": "address":"channel"]}
-parse/0: instruction: write
-parse/0:   ingredient: {name: "1", value: 0, type: 2-10, properties: ["1": "address":"channel"]}
-parse/0:   ingredient: {name: "34", value: 0, type: 0, properties: ["34": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 2-10, properties: ["1": "address":"channel"]}
-parse/0: instruction: read
-parse/0:   ingredient: {name: "1", value: 0, type: 2-10, properties: ["1": "address":"channel"]}
-parse/0:   product: {name: "_", value: 0, type: 0, properties: ["_": "dummy"]}
-parse/0:   product: {name: "1", value: 0, type: 2-10, properties: ["1": "address":"channel"]}
-parse/0: instruction: channel-empty?
-parse/0:   ingredient: {name: "1", value: 0, type: 2-10, properties: ["1": "address":"channel"]}
-parse/0:   product: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-parse/0: instruction: channel-full?
-parse/0:   ingredient: {name: "1", value: 0, type: 2-10, properties: ["1": "address":"channel"]}
-parse/0:   product: {name: "3", value: 0, type: 1, properties: ["3": "integer"]}
-after-brace/0: recipe run1001
-after-brace/0: init-channel ...
-after-brace/0: write ...
-after-brace/0: read ...
-after-brace/0: channel-empty? ...
-after-brace/0: channel-full? ...
-run/0: instruction run1001/0
-run/0: {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]} <- init-channel/108 {name: "1", value: 1, type: 0, properties: ["1": "literal", "capacity": ]}
-run/0: instruction init-channel/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1000
-run/0: instruction init-channel/1
-run/0: {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel"]} <- new/44 {name: "channel", value: 10, type: 0, properties: ["channel": "type"]}
-mem/0: new alloc: 1031
-mem/0: storing 1031 in location 1002
-run/0: instruction init-channel/2
-run/0: {name: "full", value: 2, type: 2-1, properties: ["full": "address":"integer"]} <- get-address/25 {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
-run/0: ingredient 0 is result
-mem/0: location 1002 is 1031
-run/0: ingredient 1 is first-full
-run/0: address to copy is 1031
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1003
-run/0: instruction init-channel/3
-run/0: {name: "full", value: 2, type: 2-1, properties: ["full": "address":"integer", "deref": ]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
-mem/0: location 1003 is 1031
-mem/0: storing 0 in location 1031
-run/0: instruction init-channel/4
-run/0: {name: "free", value: 3, type: 2-1, properties: ["free": "address":"integer"]} <- get-address/25 {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
-run/0: ingredient 0 is result
-mem/0: location 1002 is 1031
-run/0: ingredient 1 is first-free
-run/0: address to copy is 1032
-run/0: product 0 is 1032
-mem/0: storing 1032 in location 1004
-run/0: instruction init-channel/5
-run/0: {name: "free", value: 3, type: 2-1, properties: ["free": "address":"integer", "deref": ]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
-mem/0: location 1004 is 1032
-mem/0: storing 0 in location 1032
-run/0: instruction init-channel/6
-run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- next-ingredient/30 
-run/0: product 0 is 1
-mem/0: storing 1 in location 1005
-run/0: instruction init-channel/7
-run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- add/2 {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is capacity
-mem/0: location 1005 is 1
-run/0: ingredient 1 is 1
-run/0: product 0 is 2
-mem/0: storing 2 in location 1005
-run/0: instruction init-channel/8
-run/0: {name: "dest", value: 5, type: 2-2-5-1, properties: ["dest": "address":"address":"array":"location"]} <- get-address/25 {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is result
-mem/0: location 1002 is 1031
-run/0: ingredient 1 is data
-run/0: address to copy is 1033
-run/0: product 0 is 1033
-mem/0: storing 1033 in location 1006
-run/0: instruction init-channel/9
-run/0: {name: "dest", value: 5, type: 2-2-5-1, properties: ["dest": "address":"address":"array":"location", "deref": ]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}
-mem/0: location 1005 is 2
-mem/0: array size is 2
-mem/0: new alloc: 1034
-mem/0: location 1006 is 1033
-mem/0: storing 1034 in location 1033
-run/0: instruction init-channel/10
-run/0: reply/33 {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel"]}
-mem/0: location 1002 is 1031
-run/0: result 0 is 1031
-mem/0: storing 1031 in location 1
-run/0: instruction run1001/1
-run/0: {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]} <- write/109 {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]}, {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
-mem/0: location 1 is 1031
-run/0: instruction write/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1037
-run/0: instruction write/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/30 
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1039
-run/0: instruction write/2
-run/0: {name: "val", value: 2, type: 1, properties: ["val": "location"]} <- next-ingredient/30 
-run/0: product 0 is 34
-mem/0: storing 34 in location 1040
-run/0: instruction write/4
-run/0: {name: "full", value: 3, type: 3, properties: ["full": "boolean"]} <- channel-full?/110 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]}
-mem/0: location 1039 is 1031
-run/0: instruction channel-full?/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1068
-run/0: instruction channel-full?/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/30 
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1070
-run/0: instruction channel-full?/2
-run/0: {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]} <- get/24 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
-run/0: ingredient 0 is chan
-mem/0: location 1070 is 1031
-run/0: ingredient 1 is first-free
-run/0: address to copy is 1032
-run/0: its type is 1
-mem/0: location 1032 is 0
-run/0: product 0 is 0
-mem/0: storing 0 in location 1071
-run/0: instruction channel-full?/3
-run/0: {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]} <- add/2 {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is tmp
-mem/0: location 1071 is 0
-run/0: ingredient 1 is 1
-run/0: product 0 is 1
-mem/0: storing 1 in location 1071
-run/0: instruction channel-full?/5
-run/0: {name: "len", value: 3, type: 1, properties: ["len": "integer"]} <- channel-capacity/113 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]}
-mem/0: location 1070 is 1031
-run/0: instruction channel-capacity/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1099
-run/0: instruction channel-capacity/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/30 
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1101
-run/0: instruction channel-capacity/2
-run/0: {name: "q", value: 2, type: 2-5-1, properties: ["q": "address":"array":"location"]} <- get/24 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is chan
-mem/0: location 1101 is 1031
-run/0: ingredient 1 is data
-run/0: address to copy is 1033
-run/0: its type is 2
-mem/0: location 1033 is 1034
-run/0: product 0 is 1034
-mem/0: storing 1034 in location 1102
-run/0: instruction channel-capacity/3
-run/0: {name: "result", value: 3, type: 1, properties: ["result": "integer"]} <- length/28 {name: "q", value: 2, type: 2-5-1, properties: ["q": "address":"array":"location", "deref": ]}
-mem/0: location 1102 is 1034
-mem/0: storing 2 in location 1103
-run/0: instruction channel-capacity/4
-run/0: reply/33 {name: "result", value: 3, type: 1, properties: ["result": "integer"]}
-mem/0: location 1103 is 2
-run/0: result 0 is 2
-mem/0: storing 2 in location 1072
-run/0: instruction channel-full?/6
-run/0: {name: "at-end?", value: 4, type: 3, properties: ["at-end?": "boolean"]} <- greater-or-equal/16 {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}, {name: "len", value: 3, type: 1, properties: ["len": "integer"]}
-run/0: ingredient 0 is tmp
-mem/0: location 1071 is 1
-run/0: ingredient 1 is len
-mem/0: location 1072 is 2
-run/0: product 0 is 0
-mem/0: storing 0 in location 1073
-run/0: instruction channel-full?/7
-run/0: break-unless/12 {name: "at-end?", value: 4, type: 3, properties: ["at-end?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
-mem/0: location 1073 is 0
-run/0: ingredient 0 is 0
-run/0: ingredient 1 is 
-run/0: jumping to instruction 9
-run/0: instruction channel-full?/10
-run/0: {name: "full", value: 5, type: 1, properties: ["full": "integer"]} <- get/24 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
-run/0: ingredient 0 is chan
-mem/0: location 1070 is 1031
-run/0: ingredient 1 is first-full
-run/0: address to copy is 1031
-run/0: its type is 1
-mem/0: location 1031 is 0
-run/0: product 0 is 0
-mem/0: storing 0 in location 1074
-run/0: instruction channel-full?/11
-run/0: {name: "result", value: 6, type: 3, properties: ["result": "boolean"]} <- equal/13 {name: "full", value: 5, type: 1, properties: ["full": "integer"]}, {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}
-run/0: ingredient 0 is full
-mem/0: location 1074 is 0
-run/0: ingredient 1 is tmp
-mem/0: location 1071 is 1
-run/0: product 0 is 0
-mem/0: storing 0 in location 1075
-run/0: instruction channel-full?/12
-run/0: reply/33 {name: "result", value: 6, type: 3, properties: ["result": "boolean"]}
-mem/0: location 1075 is 0
-run/0: result 0 is 0
-mem/0: storing 0 in location 1041
-run/0: instruction write/5
-run/0: break-unless/12 {name: "full", value: 3, type: 3, properties: ["full": "boolean"]}, {name: "", value: 2, type: , properties: ["": ]}
-mem/0: location 1041 is 0
-run/0: ingredient 0 is 0
-run/0: ingredient 1 is 
-run/0: jumping to instruction 8
-run/0: instruction write/9
-run/0: {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location"]} <- get/24 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is chan
-mem/0: location 1039 is 1031
-run/0: ingredient 1 is data
-run/0: address to copy is 1033
-run/0: its type is 2
-mem/0: location 1033 is 1034
-run/0: product 0 is 1034
-mem/0: storing 1034 in location 1043
-run/0: instruction write/10
-run/0: {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer"]} <- get-address/25 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
-run/0: ingredient 0 is chan
-mem/0: location 1039 is 1031
-run/0: ingredient 1 is first-free
-run/0: address to copy is 1032
-run/0: product 0 is 1032
-mem/0: storing 1032 in location 1044
-run/0: instruction write/11
-run/0: {name: "dest", value: 7, type: 2-1, properties: ["dest": "address":"location"]} <- index-address/27 {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}, {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}
-run/0: ingredient 0 is circular-buffer
-mem/0: location 1043 is 1034
-run/0: ingredient 1 is {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}
-mem/0: location 1044 is 1032
-mem/0: location 1032 is 0
-run/0: address to copy is 1035
-run/0: product 0 is 1035
-mem/0: storing 1035 in location 1045
-run/0: instruction write/12
-run/0: {name: "dest", value: 7, type: 2-1, properties: ["dest": "address":"location", "deref": ]} <- copy/1 {name: "val", value: 2, type: 1, properties: ["val": "location"]}
-run/0: ingredient 0 is val
-mem/0: location 1040 is 34
-mem/0: location 1045 is 1035
-mem/0: storing 34 in location 1035
-run/0: instruction write/13
-run/0: {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]} <- add/2 {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is free
-mem/0: location 1044 is 1032
-mem/0: location 1032 is 0
-run/0: ingredient 1 is 1
-run/0: product 0 is 1
-mem/0: location 1044 is 1032
-mem/0: storing 1 in location 1032
-run/0: instruction write/15
-run/0: {name: "len", value: 8, type: 1, properties: ["len": "integer"]} <- length/28 {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}
-mem/0: location 1043 is 1034
-mem/0: storing 2 in location 1046
-run/0: instruction write/16
-run/0: {name: "at-end?", value: 9, type: 3, properties: ["at-end?": "boolean"]} <- greater-or-equal/16 {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}, {name: "len", value: 8, type: 1, properties: ["len": "integer"]}
-run/0: ingredient 0 is free
-mem/0: location 1044 is 1032
-mem/0: location 1032 is 1
-run/0: ingredient 1 is len
-mem/0: location 1046 is 2
-run/0: product 0 is 0
-mem/0: storing 0 in location 1047
-run/0: instruction write/17
-run/0: break-unless/12 {name: "at-end?", value: 9, type: 3, properties: ["at-end?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
-mem/0: location 1047 is 0
-run/0: ingredient 0 is 0
-run/0: ingredient 1 is 
-run/0: jumping to instruction 19
-run/0: instruction write/20
-run/0: reply/33 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "same-as-ingredient": "0"]}
-mem/0: location 1039 is 1031
-run/0: result 0 is 1031
-mem/0: storing 1031 in location 1
-run/0: instruction run1001/2
-run/0: {name: "_", value: 0, type: 0, properties: ["_": "dummy"]}, {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]} <- read/111 {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]}
-mem/0: location 1 is 1031
-run/0: instruction read/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1130
-run/0: instruction read/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/30 
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1132
-run/0: instruction read/3
-run/0: {name: "empty", value: 2, type: 3, properties: ["empty": "boolean"]} <- channel-empty?/112 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]}
-mem/0: location 1132 is 1031
-run/0: instruction channel-empty?/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1161
-run/0: instruction channel-empty?/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/30 
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1163
-run/0: instruction channel-empty?/2
-run/0: {name: "full", value: 2, type: 1, properties: ["full": "integer"]} <- get/24 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
-run/0: ingredient 0 is chan
-mem/0: location 1163 is 1031
-run/0: ingredient 1 is first-full
-run/0: address to copy is 1031
-run/0: its type is 1
-mem/0: location 1031 is 0
-run/0: product 0 is 0
-mem/0: storing 0 in location 1164
-run/0: instruction channel-empty?/3
-run/0: {name: "free", value: 3, type: 1, properties: ["free": "integer"]} <- get/24 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
-run/0: ingredient 0 is chan
-mem/0: location 1163 is 1031
-run/0: ingredient 1 is first-free
-run/0: address to copy is 1032
-run/0: its type is 1
-mem/0: location 1032 is 1
-run/0: product 0 is 1
-mem/0: storing 1 in location 1165
-run/0: instruction channel-empty?/4
-run/0: {name: "result", value: 4, type: 3, properties: ["result": "boolean"]} <- equal/13 {name: "full", value: 2, type: 1, properties: ["full": "integer"]}, {name: "free", value: 3, type: 1, properties: ["free": "integer"]}
-run/0: ingredient 0 is full
-mem/0: location 1164 is 0
-run/0: ingredient 1 is free
-mem/0: location 1165 is 1
-run/0: product 0 is 0
-mem/0: storing 0 in location 1166
-run/0: instruction channel-empty?/5
-run/0: reply/33 {name: "result", value: 4, type: 3, properties: ["result": "boolean"]}
-mem/0: location 1166 is 0
-run/0: result 0 is 0
-mem/0: storing 0 in location 1133
-run/0: instruction read/4
-run/0: break-unless/12 {name: "empty", value: 2, type: 3, properties: ["empty": "boolean"]}, {name: "", value: 2, type: , properties: ["": ]}
-mem/0: location 1133 is 0
-run/0: ingredient 0 is 0
-run/0: ingredient 1 is 
-run/0: jumping to instruction 7
-run/0: instruction read/8
-run/0: {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer"]} <- get-address/25 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
-run/0: ingredient 0 is chan
-mem/0: location 1132 is 1031
-run/0: ingredient 1 is first-full
-run/0: address to copy is 1031
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1135
-run/0: instruction read/9
-run/0: {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location"]} <- get/24 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is chan
-mem/0: location 1132 is 1031
-run/0: ingredient 1 is data
-run/0: address to copy is 1033
-run/0: its type is 2
-mem/0: location 1033 is 1034
-run/0: product 0 is 1034
-mem/0: storing 1034 in location 1136
-run/0: instruction read/10
-run/0: {name: "result", value: 6, type: 1, properties: ["result": "location"]} <- index/26 {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}, {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer", "deref": ]}
-run/0: ingredient 0 is {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}
-mem/0: location 1136 is 1034
-run/0: ingredient 1 is {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer", "deref": ]}
-mem/0: location 1135 is 1031
-mem/0: location 1031 is 0
-run/0: address to copy is 1035
-run/0: its type is 1
-mem/0: location 1035 is 34
-run/0: product 0 is 34
-mem/0: storing 34 in location 1137
-run/0: instruction read/11
-run/0: {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer", "deref": ]} <- add/2 {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is full
-mem/0: location 1135 is 1031
-mem/0: location 1031 is 0
-run/0: ingredient 1 is 1
-run/0: product 0 is 1
-mem/0: location 1135 is 1031
-mem/0: storing 1 in location 1031
-run/0: instruction read/13
-run/0: {name: "len", value: 7, type: 1, properties: ["len": "integer"]} <- length/28 {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}
-mem/0: location 1136 is 1034
-mem/0: storing 2 in location 1138
-run/0: instruction read/14
-run/0: {name: "at-end?", value: 8, type: 3, properties: ["at-end?": "boolean"]} <- greater-or-equal/16 {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer", "deref": ]}, {name: "len", value: 7, type: 1, properties: ["len": "integer"]}
-run/0: ingredient 0 is full
-mem/0: location 1135 is 1031
-mem/0: location 1031 is 1
-run/0: ingredient 1 is len
-mem/0: location 1138 is 2
-run/0: product 0 is 0
-mem/0: storing 0 in location 1139
-run/0: instruction read/15
-run/0: break-unless/12 {name: "at-end?", value: 8, type: 3, properties: ["at-end?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
-mem/0: location 1139 is 0
-run/0: ingredient 0 is 0
-run/0: ingredient 1 is 
-run/0: jumping to instruction 17
-run/0: instruction read/18
-run/0: reply/33 {name: "result", value: 6, type: 1, properties: ["result": "location"]}, {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "same-as-ingredient": "0"]}
-mem/0: location 1137 is 34
-mem/0: location 1132 is 1031
-run/0: result 0 is 34
-run/0: result 1 is 1031
-mem/0: storing 1031 in location 1
-run/0: instruction run1001/3
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- channel-empty?/112 {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]}
-mem/0: location 1 is 1031
-run/0: instruction channel-empty?/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1192
-run/0: instruction channel-empty?/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/30 
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1194
-run/0: instruction channel-empty?/2
-run/0: {name: "full", value: 2, type: 1, properties: ["full": "integer"]} <- get/24 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
-run/0: ingredient 0 is chan
-mem/0: location 1194 is 1031
-run/0: ingredient 1 is first-full
-run/0: address to copy is 1031
-run/0: its type is 1
-mem/0: location 1031 is 1
-run/0: product 0 is 1
-mem/0: storing 1 in location 1195
-run/0: instruction channel-empty?/3
-run/0: {name: "free", value: 3, type: 1, properties: ["free": "integer"]} <- get/24 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
-run/0: ingredient 0 is chan
-mem/0: location 1194 is 1031
-run/0: ingredient 1 is first-free
-run/0: address to copy is 1032
-run/0: its type is 1
-mem/0: location 1032 is 1
-run/0: product 0 is 1
-mem/0: storing 1 in location 1196
-run/0: instruction channel-empty?/4
-run/0: {name: "result", value: 4, type: 3, properties: ["result": "boolean"]} <- equal/13 {name: "full", value: 2, type: 1, properties: ["full": "integer"]}, {name: "free", value: 3, type: 1, properties: ["free": "integer"]}
-run/0: ingredient 0 is full
-mem/0: location 1195 is 1
-run/0: ingredient 1 is free
-mem/0: location 1196 is 1
-run/0: product 0 is 1
-mem/0: storing 1 in location 1197
-run/0: instruction channel-empty?/5
-run/0: reply/33 {name: "result", value: 4, type: 3, properties: ["result": "boolean"]}
-mem/0: location 1197 is 1
-run/0: result 0 is 1
-mem/0: storing 1 in location 2
-run/0: instruction run1001/4
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- channel-full?/110 {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]}
-mem/0: location 1 is 1031
-run/0: instruction channel-full?/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1223
-run/0: instruction channel-full?/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/30 
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1225
-run/0: instruction channel-full?/2
-run/0: {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]} <- get/24 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
-run/0: ingredient 0 is chan
-mem/0: location 1225 is 1031
-run/0: ingredient 1 is first-free
-run/0: address to copy is 1032
-run/0: its type is 1
-mem/0: location 1032 is 1
-run/0: product 0 is 1
-mem/0: storing 1 in location 1226
-run/0: instruction channel-full?/3
-run/0: {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]} <- add/2 {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is tmp
-mem/0: location 1226 is 1
-run/0: ingredient 1 is 1
-run/0: product 0 is 2
-mem/0: storing 2 in location 1226
-run/0: instruction channel-full?/5
-run/0: {name: "len", value: 3, type: 1, properties: ["len": "integer"]} <- channel-capacity/113 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]}
-mem/0: location 1225 is 1031
-run/0: instruction channel-capacity/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1254
-run/0: instruction channel-capacity/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/30 
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1256
-run/0: instruction channel-capacity/2
-run/0: {name: "q", value: 2, type: 2-5-1, properties: ["q": "address":"array":"location"]} <- get/24 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is chan
-mem/0: location 1256 is 1031
-run/0: ingredient 1 is data
-run/0: address to copy is 1033
-run/0: its type is 2
-mem/0: location 1033 is 1034
-run/0: product 0 is 1034
-mem/0: storing 1034 in location 1257
-run/0: instruction channel-capacity/3
-run/0: {name: "result", value: 3, type: 1, properties: ["result": "integer"]} <- length/28 {name: "q", value: 2, type: 2-5-1, properties: ["q": "address":"array":"location", "deref": ]}
-mem/0: location 1257 is 1034
-mem/0: storing 2 in location 1258
-run/0: instruction channel-capacity/4
-run/0: reply/33 {name: "result", value: 3, type: 1, properties: ["result": "integer"]}
-mem/0: location 1258 is 2
-run/0: result 0 is 2
-mem/0: storing 2 in location 1227
-run/0: instruction channel-full?/6
-run/0: {name: "at-end?", value: 4, type: 3, properties: ["at-end?": "boolean"]} <- greater-or-equal/16 {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}, {name: "len", value: 3, type: 1, properties: ["len": "integer"]}
-run/0: ingredient 0 is tmp
-mem/0: location 1226 is 2
-run/0: ingredient 1 is len
-mem/0: location 1227 is 2
-run/0: product 0 is 1
-mem/0: storing 1 in location 1228
-run/0: instruction channel-full?/7
-run/0: break-unless/12 {name: "at-end?", value: 4, type: 3, properties: ["at-end?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
-mem/0: location 1228 is 1
-run/0: ingredient 0 is 1
-run/0: jump-unless fell through
-run/0: instruction channel-full?/8
-run/0: {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
-mem/0: storing 0 in location 1226
-run/0: instruction channel-full?/10
-run/0: {name: "full", value: 5, type: 1, properties: ["full": "integer"]} <- get/24 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
-run/0: ingredient 0 is chan
-mem/0: location 1225 is 1031
-run/0: ingredient 1 is first-full
-run/0: address to copy is 1031
-run/0: its type is 1
-mem/0: location 1031 is 1
-run/0: product 0 is 1
-mem/0: storing 1 in location 1229
-run/0: instruction channel-full?/11
-run/0: {name: "result", value: 6, type: 3, properties: ["result": "boolean"]} <- equal/13 {name: "full", value: 5, type: 1, properties: ["full": "integer"]}, {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}
-run/0: ingredient 0 is full
-mem/0: location 1229 is 1
-run/0: ingredient 1 is tmp
-mem/0: location 1226 is 0
-run/0: product 0 is 0
-mem/0: storing 0 in location 1230
-run/0: instruction channel-full?/12
-run/0: reply/33 {name: "result", value: 6, type: 3, properties: ["result": "boolean"]}
-mem/0: location 1230 is 0
-run/0: result 0 is 0
-mem/0: storing 0 in location 3
-run/0: instruction channel-read-not-full/1
-run/0: memory-should-contain/46 {name: "
-    2 <- 1  # empty?
-    3 <- 0  # full?
-  ", value: 0, type: 0, properties: ["
-    2 <- 1  # empty?
-    3 <- 0  # full?
-  ": "literal-string"]}
-run/0: checking location 2
-run/0: checking location 3
diff --git a/cpp/.traces/channel-wrap b/cpp/.traces/channel-wrap
deleted file mode 100644
index 935f3955..00000000
--- a/cpp/.traces/channel-wrap
+++ /dev/null
@@ -1,882 +0,0 @@
-parse/0: instruction: run
-parse/0:   ingredient: {name: "
-    # channel with just 1 slot
-    1:address:channel <- init-channel 1:literal/capacity
-    # write and read a value
-    1:address:channel <- write 1:address:channel, 34:literal
-    _, 1:address:channel <- read 1:address:channel
-    # first-free will now be 1
-    2:integer <- get 1:address:channel/deref, first-free:offset
-    3:integer <- get 1:address:channel/deref, first-free:offset
-    # write second value, verify that first-free wraps
-    1:address:channel <- write 1:address:channel, 34:literal
-    4:integer <- get 1:address:channel/deref, first-free:offset
-    # read second value, verify that first-full wraps
-    _, 1:address:channel <- read 1:address:channel
-    5:integer <- get 1:address:channel/deref, first-full:offset
-  ", value: 0, type: 0, properties: ["
-    # channel with just 1 slot
-    1:address:channel <- init-channel 1:literal/capacity
-    # write and read a value
-    1:address:channel <- write 1:address:channel, 34:literal
-    _, 1:address:channel <- read 1:address:channel
-    # first-free will now be 1
-    2:integer <- get 1:address:channel/deref, first-free:offset
-    3:integer <- get 1:address:channel/deref, first-free:offset
-    # write second value, verify that first-free wraps
-    1:address:channel <- write 1:address:channel, 34:literal
-    4:integer <- get 1:address:channel/deref, first-free:offset
-    # read second value, verify that first-full wraps
-    _, 1:address:channel <- read 1:address:channel
-    5:integer <- get 1:address:channel/deref, first-full:offset
-  ": "literal-string"]}
-parse/0: instruction: memory-should-contain
-parse/0:   ingredient: {name: "
-    2 <- 1  # first-free after first write
-    3 <- 1  # first-full after first read
-    4 <- 0  # first-free after second write, wrapped
-    5 <- 0  # first-full after second read, wrapped
-  ", value: 0, type: 0, properties: ["
-    2 <- 1  # first-free after first write
-    3 <- 1  # first-full after first read
-    4 <- 0  # first-free after second write, wrapped
-    5 <- 0  # first-full after second read, wrapped
-  ": "literal-string"]}
-after-brace/0: recipe channel-wrap
-after-brace/0: run ...
-after-brace/0: memory-should-contain ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: channel-wrap
-run/0: instruction channel-wrap/0
-run/0: run/45 {name: "
-    # channel with just 1 slot
-    1:address:channel <- init-channel 1:literal/capacity
-    # write and read a value
-    1:address:channel <- write 1:address:channel, 34:literal
-    _, 1:address:channel <- read 1:address:channel
-    # first-free will now be 1
-    2:integer <- get 1:address:channel/deref, first-free:offset
-    3:integer <- get 1:address:channel/deref, first-free:offset
-    # write second value, verify that first-free wraps
-    1:address:channel <- write 1:address:channel, 34:literal
-    4:integer <- get 1:address:channel/deref, first-free:offset
-    # read second value, verify that first-full wraps
-    _, 1:address:channel <- read 1:address:channel
-    5:integer <- get 1:address:channel/deref, first-full:offset
-  ", value: 0, type: 0, properties: ["
-    # channel with just 1 slot
-    1:address:channel <- init-channel 1:literal/capacity
-    # write and read a value
-    1:address:channel <- write 1:address:channel, 34:literal
-    _, 1:address:channel <- read 1:address:channel
-    # first-free will now be 1
-    2:integer <- get 1:address:channel/deref, first-free:offset
-    3:integer <- get 1:address:channel/deref, first-free:offset
-    # write second value, verify that first-free wraps
-    1:address:channel <- write 1:address:channel, 34:literal
-    4:integer <- get 1:address:channel/deref, first-free:offset
-    # read second value, verify that first-full wraps
-    _, 1:address:channel <- read 1:address:channel
-    5:integer <- get 1:address:channel/deref, first-full:offset
-  ": "literal-string"]}
-parse/0: instruction: init-channel
-parse/0:   ingredient: {name: "1", value: 0, type: 0, properties: ["1": "literal", "capacity": ]}
-parse/0:   product: {name: "1", value: 0, type: 2-10, properties: ["1": "address":"channel"]}
-parse/0: instruction: write
-parse/0:   ingredient: {name: "1", value: 0, type: 2-10, properties: ["1": "address":"channel"]}
-parse/0:   ingredient: {name: "34", value: 0, type: 0, properties: ["34": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 2-10, properties: ["1": "address":"channel"]}
-parse/0: instruction: read
-parse/0:   ingredient: {name: "1", value: 0, type: 2-10, properties: ["1": "address":"channel"]}
-parse/0:   product: {name: "_", value: 0, type: 0, properties: ["_": "dummy"]}
-parse/0:   product: {name: "1", value: 0, type: 2-10, properties: ["1": "address":"channel"]}
-parse/0: instruction: get
-parse/0:   ingredient: {name: "1", value: 0, type: 2-10, properties: ["1": "address":"channel", "deref": ]}
-parse/0:   ingredient: {name: "first-free", value: 0, type: 0, properties: ["first-free": "offset"]}
-parse/0:   product: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-parse/0: instruction: get
-parse/0:   ingredient: {name: "1", value: 0, type: 2-10, properties: ["1": "address":"channel", "deref": ]}
-parse/0:   ingredient: {name: "first-free", value: 0, type: 0, properties: ["first-free": "offset"]}
-parse/0:   product: {name: "3", value: 0, type: 1, properties: ["3": "integer"]}
-parse/0: instruction: write
-parse/0:   ingredient: {name: "1", value: 0, type: 2-10, properties: ["1": "address":"channel"]}
-parse/0:   ingredient: {name: "34", value: 0, type: 0, properties: ["34": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 2-10, properties: ["1": "address":"channel"]}
-parse/0: instruction: get
-parse/0:   ingredient: {name: "1", value: 0, type: 2-10, properties: ["1": "address":"channel", "deref": ]}
-parse/0:   ingredient: {name: "first-free", value: 0, type: 0, properties: ["first-free": "offset"]}
-parse/0:   product: {name: "4", value: 0, type: 1, properties: ["4": "integer"]}
-parse/0: instruction: read
-parse/0:   ingredient: {name: "1", value: 0, type: 2-10, properties: ["1": "address":"channel"]}
-parse/0:   product: {name: "_", value: 0, type: 0, properties: ["_": "dummy"]}
-parse/0:   product: {name: "1", value: 0, type: 2-10, properties: ["1": "address":"channel"]}
-parse/0: instruction: get
-parse/0:   ingredient: {name: "1", value: 0, type: 2-10, properties: ["1": "address":"channel", "deref": ]}
-parse/0:   ingredient: {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
-parse/0:   product: {name: "5", value: 0, type: 1, properties: ["5": "integer"]}
-name/0: element first-free of type channel is at offset 1
-name/0: element first-free of type channel is at offset 1
-name/0: element first-free of type channel is at offset 1
-name/0: element first-full of type channel is at offset 0
-after-brace/0: recipe run1001
-after-brace/0: init-channel ...
-after-brace/0: write ...
-after-brace/0: read ...
-after-brace/0: get ...
-after-brace/0: get ...
-after-brace/0: write ...
-after-brace/0: get ...
-after-brace/0: read ...
-after-brace/0: get ...
-run/0: instruction run1001/0
-run/0: {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]} <- init-channel/108 {name: "1", value: 1, type: 0, properties: ["1": "literal", "capacity": ]}
-run/0: instruction init-channel/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1000
-run/0: instruction init-channel/1
-run/0: {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel"]} <- new/44 {name: "channel", value: 10, type: 0, properties: ["channel": "type"]}
-mem/0: new alloc: 1031
-mem/0: storing 1031 in location 1002
-run/0: instruction init-channel/2
-run/0: {name: "full", value: 2, type: 2-1, properties: ["full": "address":"integer"]} <- get-address/25 {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
-run/0: ingredient 0 is result
-mem/0: location 1002 is 1031
-run/0: ingredient 1 is first-full
-run/0: address to copy is 1031
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1003
-run/0: instruction init-channel/3
-run/0: {name: "full", value: 2, type: 2-1, properties: ["full": "address":"integer", "deref": ]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
-mem/0: location 1003 is 1031
-mem/0: storing 0 in location 1031
-run/0: instruction init-channel/4
-run/0: {name: "free", value: 3, type: 2-1, properties: ["free": "address":"integer"]} <- get-address/25 {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
-run/0: ingredient 0 is result
-mem/0: location 1002 is 1031
-run/0: ingredient 1 is first-free
-run/0: address to copy is 1032
-run/0: product 0 is 1032
-mem/0: storing 1032 in location 1004
-run/0: instruction init-channel/5
-run/0: {name: "free", value: 3, type: 2-1, properties: ["free": "address":"integer", "deref": ]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
-mem/0: location 1004 is 1032
-mem/0: storing 0 in location 1032
-run/0: instruction init-channel/6
-run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- next-ingredient/30 
-run/0: product 0 is 1
-mem/0: storing 1 in location 1005
-run/0: instruction init-channel/7
-run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- add/2 {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is capacity
-mem/0: location 1005 is 1
-run/0: ingredient 1 is 1
-run/0: product 0 is 2
-mem/0: storing 2 in location 1005
-run/0: instruction init-channel/8
-run/0: {name: "dest", value: 5, type: 2-2-5-1, properties: ["dest": "address":"address":"array":"location"]} <- get-address/25 {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is result
-mem/0: location 1002 is 1031
-run/0: ingredient 1 is data
-run/0: address to copy is 1033
-run/0: product 0 is 1033
-mem/0: storing 1033 in location 1006
-run/0: instruction init-channel/9
-run/0: {name: "dest", value: 5, type: 2-2-5-1, properties: ["dest": "address":"address":"array":"location", "deref": ]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}
-mem/0: location 1005 is 2
-mem/0: array size is 2
-mem/0: new alloc: 1034
-mem/0: location 1006 is 1033
-mem/0: storing 1034 in location 1033
-run/0: instruction init-channel/10
-run/0: reply/33 {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel"]}
-mem/0: location 1002 is 1031
-run/0: result 0 is 1031
-mem/0: storing 1031 in location 1
-run/0: instruction run1001/1
-run/0: {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]} <- write/109 {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]}, {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
-mem/0: location 1 is 1031
-run/0: instruction write/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1037
-run/0: instruction write/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/30 
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1039
-run/0: instruction write/2
-run/0: {name: "val", value: 2, type: 1, properties: ["val": "location"]} <- next-ingredient/30 
-run/0: product 0 is 34
-mem/0: storing 34 in location 1040
-run/0: instruction write/4
-run/0: {name: "full", value: 3, type: 3, properties: ["full": "boolean"]} <- channel-full?/110 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]}
-mem/0: location 1039 is 1031
-run/0: instruction channel-full?/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1068
-run/0: instruction channel-full?/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/30 
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1070
-run/0: instruction channel-full?/2
-run/0: {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]} <- get/24 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
-run/0: ingredient 0 is chan
-mem/0: location 1070 is 1031
-run/0: ingredient 1 is first-free
-run/0: address to copy is 1032
-run/0: its type is 1
-mem/0: location 1032 is 0
-run/0: product 0 is 0
-mem/0: storing 0 in location 1071
-run/0: instruction channel-full?/3
-run/0: {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]} <- add/2 {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is tmp
-mem/0: location 1071 is 0
-run/0: ingredient 1 is 1
-run/0: product 0 is 1
-mem/0: storing 1 in location 1071
-run/0: instruction channel-full?/5
-run/0: {name: "len", value: 3, type: 1, properties: ["len": "integer"]} <- channel-capacity/113 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]}
-mem/0: location 1070 is 1031
-run/0: instruction channel-capacity/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1099
-run/0: instruction channel-capacity/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/30 
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1101
-run/0: instruction channel-capacity/2
-run/0: {name: "q", value: 2, type: 2-5-1, properties: ["q": "address":"array":"location"]} <- get/24 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is chan
-mem/0: location 1101 is 1031
-run/0: ingredient 1 is data
-run/0: address to copy is 1033
-run/0: its type is 2
-mem/0: location 1033 is 1034
-run/0: product 0 is 1034
-mem/0: storing 1034 in location 1102
-run/0: instruction channel-capacity/3
-run/0: {name: "result", value: 3, type: 1, properties: ["result": "integer"]} <- length/28 {name: "q", value: 2, type: 2-5-1, properties: ["q": "address":"array":"location", "deref": ]}
-mem/0: location 1102 is 1034
-mem/0: storing 2 in location 1103
-run/0: instruction channel-capacity/4
-run/0: reply/33 {name: "result", value: 3, type: 1, properties: ["result": "integer"]}
-mem/0: location 1103 is 2
-run/0: result 0 is 2
-mem/0: storing 2 in location 1072
-run/0: instruction channel-full?/6
-run/0: {name: "at-end?", value: 4, type: 3, properties: ["at-end?": "boolean"]} <- greater-or-equal/16 {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}, {name: "len", value: 3, type: 1, properties: ["len": "integer"]}
-run/0: ingredient 0 is tmp
-mem/0: location 1071 is 1
-run/0: ingredient 1 is len
-mem/0: location 1072 is 2
-run/0: product 0 is 0
-mem/0: storing 0 in location 1073
-run/0: instruction channel-full?/7
-run/0: break-unless/12 {name: "at-end?", value: 4, type: 3, properties: ["at-end?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
-mem/0: location 1073 is 0
-run/0: ingredient 0 is 0
-run/0: ingredient 1 is 
-run/0: jumping to instruction 9
-run/0: instruction channel-full?/10
-run/0: {name: "full", value: 5, type: 1, properties: ["full": "integer"]} <- get/24 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
-run/0: ingredient 0 is chan
-mem/0: location 1070 is 1031
-run/0: ingredient 1 is first-full
-run/0: address to copy is 1031
-run/0: its type is 1
-mem/0: location 1031 is 0
-run/0: product 0 is 0
-mem/0: storing 0 in location 1074
-run/0: instruction channel-full?/11
-run/0: {name: "result", value: 6, type: 3, properties: ["result": "boolean"]} <- equal/13 {name: "full", value: 5, type: 1, properties: ["full": "integer"]}, {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}
-run/0: ingredient 0 is full
-mem/0: location 1074 is 0
-run/0: ingredient 1 is tmp
-mem/0: location 1071 is 1
-run/0: product 0 is 0
-mem/0: storing 0 in location 1075
-run/0: instruction channel-full?/12
-run/0: reply/33 {name: "result", value: 6, type: 3, properties: ["result": "boolean"]}
-mem/0: location 1075 is 0
-run/0: result 0 is 0
-mem/0: storing 0 in location 1041
-run/0: instruction write/5
-run/0: break-unless/12 {name: "full", value: 3, type: 3, properties: ["full": "boolean"]}, {name: "", value: 2, type: , properties: ["": ]}
-mem/0: location 1041 is 0
-run/0: ingredient 0 is 0
-run/0: ingredient 1 is 
-run/0: jumping to instruction 8
-run/0: instruction write/9
-run/0: {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location"]} <- get/24 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is chan
-mem/0: location 1039 is 1031
-run/0: ingredient 1 is data
-run/0: address to copy is 1033
-run/0: its type is 2
-mem/0: location 1033 is 1034
-run/0: product 0 is 1034
-mem/0: storing 1034 in location 1043
-run/0: instruction write/10
-run/0: {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer"]} <- get-address/25 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
-run/0: ingredient 0 is chan
-mem/0: location 1039 is 1031
-run/0: ingredient 1 is first-free
-run/0: address to copy is 1032
-run/0: product 0 is 1032
-mem/0: storing 1032 in location 1044
-run/0: instruction write/11
-run/0: {name: "dest", value: 7, type: 2-1, properties: ["dest": "address":"location"]} <- index-address/27 {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}, {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}
-run/0: ingredient 0 is circular-buffer
-mem/0: location 1043 is 1034
-run/0: ingredient 1 is {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}
-mem/0: location 1044 is 1032
-mem/0: location 1032 is 0
-run/0: address to copy is 1035
-run/0: product 0 is 1035
-mem/0: storing 1035 in location 1045
-run/0: instruction write/12
-run/0: {name: "dest", value: 7, type: 2-1, properties: ["dest": "address":"location", "deref": ]} <- copy/1 {name: "val", value: 2, type: 1, properties: ["val": "location"]}
-run/0: ingredient 0 is val
-mem/0: location 1040 is 34
-mem/0: location 1045 is 1035
-mem/0: storing 34 in location 1035
-run/0: instruction write/13
-run/0: {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]} <- add/2 {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is free
-mem/0: location 1044 is 1032
-mem/0: location 1032 is 0
-run/0: ingredient 1 is 1
-run/0: product 0 is 1
-mem/0: location 1044 is 1032
-mem/0: storing 1 in location 1032
-run/0: instruction write/15
-run/0: {name: "len", value: 8, type: 1, properties: ["len": "integer"]} <- length/28 {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}
-mem/0: location 1043 is 1034
-mem/0: storing 2 in location 1046
-run/0: instruction write/16
-run/0: {name: "at-end?", value: 9, type: 3, properties: ["at-end?": "boolean"]} <- greater-or-equal/16 {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}, {name: "len", value: 8, type: 1, properties: ["len": "integer"]}
-run/0: ingredient 0 is free
-mem/0: location 1044 is 1032
-mem/0: location 1032 is 1
-run/0: ingredient 1 is len
-mem/0: location 1046 is 2
-run/0: product 0 is 0
-mem/0: storing 0 in location 1047
-run/0: instruction write/17
-run/0: break-unless/12 {name: "at-end?", value: 9, type: 3, properties: ["at-end?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
-mem/0: location 1047 is 0
-run/0: ingredient 0 is 0
-run/0: ingredient 1 is 
-run/0: jumping to instruction 19
-run/0: instruction write/20
-run/0: reply/33 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "same-as-ingredient": "0"]}
-mem/0: location 1039 is 1031
-run/0: result 0 is 1031
-mem/0: storing 1031 in location 1
-run/0: instruction run1001/2
-run/0: {name: "_", value: 0, type: 0, properties: ["_": "dummy"]}, {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]} <- read/111 {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]}
-mem/0: location 1 is 1031
-run/0: instruction read/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1130
-run/0: instruction read/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/30 
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1132
-run/0: instruction read/3
-run/0: {name: "empty", value: 2, type: 3, properties: ["empty": "boolean"]} <- channel-empty?/112 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]}
-mem/0: location 1132 is 1031
-run/0: instruction channel-empty?/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1161
-run/0: instruction channel-empty?/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/30 
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1163
-run/0: instruction channel-empty?/2
-run/0: {name: "full", value: 2, type: 1, properties: ["full": "integer"]} <- get/24 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
-run/0: ingredient 0 is chan
-mem/0: location 1163 is 1031
-run/0: ingredient 1 is first-full
-run/0: address to copy is 1031
-run/0: its type is 1
-mem/0: location 1031 is 0
-run/0: product 0 is 0
-mem/0: storing 0 in location 1164
-run/0: instruction channel-empty?/3
-run/0: {name: "free", value: 3, type: 1, properties: ["free": "integer"]} <- get/24 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
-run/0: ingredient 0 is chan
-mem/0: location 1163 is 1031
-run/0: ingredient 1 is first-free
-run/0: address to copy is 1032
-run/0: its type is 1
-mem/0: location 1032 is 1
-run/0: product 0 is 1
-mem/0: storing 1 in location 1165
-run/0: instruction channel-empty?/4
-run/0: {name: "result", value: 4, type: 3, properties: ["result": "boolean"]} <- equal/13 {name: "full", value: 2, type: 1, properties: ["full": "integer"]}, {name: "free", value: 3, type: 1, properties: ["free": "integer"]}
-run/0: ingredient 0 is full
-mem/0: location 1164 is 0
-run/0: ingredient 1 is free
-mem/0: location 1165 is 1
-run/0: product 0 is 0
-mem/0: storing 0 in location 1166
-run/0: instruction channel-empty?/5
-run/0: reply/33 {name: "result", value: 4, type: 3, properties: ["result": "boolean"]}
-mem/0: location 1166 is 0
-run/0: result 0 is 0
-mem/0: storing 0 in location 1133
-run/0: instruction read/4
-run/0: break-unless/12 {name: "empty", value: 2, type: 3, properties: ["empty": "boolean"]}, {name: "", value: 2, type: , properties: ["": ]}
-mem/0: location 1133 is 0
-run/0: ingredient 0 is 0
-run/0: ingredient 1 is 
-run/0: jumping to instruction 7
-run/0: instruction read/8
-run/0: {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer"]} <- get-address/25 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
-run/0: ingredient 0 is chan
-mem/0: location 1132 is 1031
-run/0: ingredient 1 is first-full
-run/0: address to copy is 1031
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1135
-run/0: instruction read/9
-run/0: {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location"]} <- get/24 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is chan
-mem/0: location 1132 is 1031
-run/0: ingredient 1 is data
-run/0: address to copy is 1033
-run/0: its type is 2
-mem/0: location 1033 is 1034
-run/0: product 0 is 1034
-mem/0: storing 1034 in location 1136
-run/0: instruction read/10
-run/0: {name: "result", value: 6, type: 1, properties: ["result": "location"]} <- index/26 {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}, {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer", "deref": ]}
-run/0: ingredient 0 is {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}
-mem/0: location 1136 is 1034
-run/0: ingredient 1 is {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer", "deref": ]}
-mem/0: location 1135 is 1031
-mem/0: location 1031 is 0
-run/0: address to copy is 1035
-run/0: its type is 1
-mem/0: location 1035 is 34
-run/0: product 0 is 34
-mem/0: storing 34 in location 1137
-run/0: instruction read/11
-run/0: {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer", "deref": ]} <- add/2 {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is full
-mem/0: location 1135 is 1031
-mem/0: location 1031 is 0
-run/0: ingredient 1 is 1
-run/0: product 0 is 1
-mem/0: location 1135 is 1031
-mem/0: storing 1 in location 1031
-run/0: instruction read/13
-run/0: {name: "len", value: 7, type: 1, properties: ["len": "integer"]} <- length/28 {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}
-mem/0: location 1136 is 1034
-mem/0: storing 2 in location 1138
-run/0: instruction read/14
-run/0: {name: "at-end?", value: 8, type: 3, properties: ["at-end?": "boolean"]} <- greater-or-equal/16 {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer", "deref": ]}, {name: "len", value: 7, type: 1, properties: ["len": "integer"]}
-run/0: ingredient 0 is full
-mem/0: location 1135 is 1031
-mem/0: location 1031 is 1
-run/0: ingredient 1 is len
-mem/0: location 1138 is 2
-run/0: product 0 is 0
-mem/0: storing 0 in location 1139
-run/0: instruction read/15
-run/0: break-unless/12 {name: "at-end?", value: 8, type: 3, properties: ["at-end?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
-mem/0: location 1139 is 0
-run/0: ingredient 0 is 0
-run/0: ingredient 1 is 
-run/0: jumping to instruction 17
-run/0: instruction read/18
-run/0: reply/33 {name: "result", value: 6, type: 1, properties: ["result": "location"]}, {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "same-as-ingredient": "0"]}
-mem/0: location 1137 is 34
-mem/0: location 1132 is 1031
-run/0: result 0 is 34
-run/0: result 1 is 1031
-mem/0: storing 1031 in location 1
-run/0: instruction run1001/3
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- get/24 {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
-run/0: ingredient 0 is 1
-mem/0: location 1 is 1031
-run/0: ingredient 1 is first-free
-run/0: address to copy is 1032
-run/0: its type is 1
-mem/0: location 1032 is 1
-run/0: product 0 is 1
-mem/0: storing 1 in location 2
-run/0: instruction run1001/4
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- get/24 {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
-run/0: ingredient 0 is 1
-mem/0: location 1 is 1031
-run/0: ingredient 1 is first-free
-run/0: address to copy is 1032
-run/0: its type is 1
-mem/0: location 1032 is 1
-run/0: product 0 is 1
-mem/0: storing 1 in location 3
-run/0: instruction run1001/5
-run/0: {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]} <- write/109 {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]}, {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
-mem/0: location 1 is 1031
-run/0: instruction write/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1192
-run/0: instruction write/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/30 
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1194
-run/0: instruction write/2
-run/0: {name: "val", value: 2, type: 1, properties: ["val": "location"]} <- next-ingredient/30 
-run/0: product 0 is 34
-mem/0: storing 34 in location 1195
-run/0: instruction write/4
-run/0: {name: "full", value: 3, type: 3, properties: ["full": "boolean"]} <- channel-full?/110 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]}
-mem/0: location 1194 is 1031
-run/0: instruction channel-full?/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1223
-run/0: instruction channel-full?/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/30 
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1225
-run/0: instruction channel-full?/2
-run/0: {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]} <- get/24 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
-run/0: ingredient 0 is chan
-mem/0: location 1225 is 1031
-run/0: ingredient 1 is first-free
-run/0: address to copy is 1032
-run/0: its type is 1
-mem/0: location 1032 is 1
-run/0: product 0 is 1
-mem/0: storing 1 in location 1226
-run/0: instruction channel-full?/3
-run/0: {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]} <- add/2 {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is tmp
-mem/0: location 1226 is 1
-run/0: ingredient 1 is 1
-run/0: product 0 is 2
-mem/0: storing 2 in location 1226
-run/0: instruction channel-full?/5
-run/0: {name: "len", value: 3, type: 1, properties: ["len": "integer"]} <- channel-capacity/113 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]}
-mem/0: location 1225 is 1031
-run/0: instruction channel-capacity/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1254
-run/0: instruction channel-capacity/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/30 
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1256
-run/0: instruction channel-capacity/2
-run/0: {name: "q", value: 2, type: 2-5-1, properties: ["q": "address":"array":"location"]} <- get/24 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is chan
-mem/0: location 1256 is 1031
-run/0: ingredient 1 is data
-run/0: address to copy is 1033
-run/0: its type is 2
-mem/0: location 1033 is 1034
-run/0: product 0 is 1034
-mem/0: storing 1034 in location 1257
-run/0: instruction channel-capacity/3
-run/0: {name: "result", value: 3, type: 1, properties: ["result": "integer"]} <- length/28 {name: "q", value: 2, type: 2-5-1, properties: ["q": "address":"array":"location", "deref": ]}
-mem/0: location 1257 is 1034
-mem/0: storing 2 in location 1258
-run/0: instruction channel-capacity/4
-run/0: reply/33 {name: "result", value: 3, type: 1, properties: ["result": "integer"]}
-mem/0: location 1258 is 2
-run/0: result 0 is 2
-mem/0: storing 2 in location 1227
-run/0: instruction channel-full?/6
-run/0: {name: "at-end?", value: 4, type: 3, properties: ["at-end?": "boolean"]} <- greater-or-equal/16 {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}, {name: "len", value: 3, type: 1, properties: ["len": "integer"]}
-run/0: ingredient 0 is tmp
-mem/0: location 1226 is 2
-run/0: ingredient 1 is len
-mem/0: location 1227 is 2
-run/0: product 0 is 1
-mem/0: storing 1 in location 1228
-run/0: instruction channel-full?/7
-run/0: break-unless/12 {name: "at-end?", value: 4, type: 3, properties: ["at-end?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
-mem/0: location 1228 is 1
-run/0: ingredient 0 is 1
-run/0: jump-unless fell through
-run/0: instruction channel-full?/8
-run/0: {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
-mem/0: storing 0 in location 1226
-run/0: instruction channel-full?/10
-run/0: {name: "full", value: 5, type: 1, properties: ["full": "integer"]} <- get/24 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
-run/0: ingredient 0 is chan
-mem/0: location 1225 is 1031
-run/0: ingredient 1 is first-full
-run/0: address to copy is 1031
-run/0: its type is 1
-mem/0: location 1031 is 1
-run/0: product 0 is 1
-mem/0: storing 1 in location 1229
-run/0: instruction channel-full?/11
-run/0: {name: "result", value: 6, type: 3, properties: ["result": "boolean"]} <- equal/13 {name: "full", value: 5, type: 1, properties: ["full": "integer"]}, {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}
-run/0: ingredient 0 is full
-mem/0: location 1229 is 1
-run/0: ingredient 1 is tmp
-mem/0: location 1226 is 0
-run/0: product 0 is 0
-mem/0: storing 0 in location 1230
-run/0: instruction channel-full?/12
-run/0: reply/33 {name: "result", value: 6, type: 3, properties: ["result": "boolean"]}
-mem/0: location 1230 is 0
-run/0: result 0 is 0
-mem/0: storing 0 in location 1196
-run/0: instruction write/5
-run/0: break-unless/12 {name: "full", value: 3, type: 3, properties: ["full": "boolean"]}, {name: "", value: 2, type: , properties: ["": ]}
-mem/0: location 1196 is 0
-run/0: ingredient 0 is 0
-run/0: ingredient 1 is 
-run/0: jumping to instruction 8
-run/0: instruction write/9
-run/0: {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location"]} <- get/24 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is chan
-mem/0: location 1194 is 1031
-run/0: ingredient 1 is data
-run/0: address to copy is 1033
-run/0: its type is 2
-mem/0: location 1033 is 1034
-run/0: product 0 is 1034
-mem/0: storing 1034 in location 1198
-run/0: instruction write/10
-run/0: {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer"]} <- get-address/25 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
-run/0: ingredient 0 is chan
-mem/0: location 1194 is 1031
-run/0: ingredient 1 is first-free
-run/0: address to copy is 1032
-run/0: product 0 is 1032
-mem/0: storing 1032 in location 1199
-run/0: instruction write/11
-run/0: {name: "dest", value: 7, type: 2-1, properties: ["dest": "address":"location"]} <- index-address/27 {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}, {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}
-run/0: ingredient 0 is circular-buffer
-mem/0: location 1198 is 1034
-run/0: ingredient 1 is {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}
-mem/0: location 1199 is 1032
-mem/0: location 1032 is 1
-run/0: address to copy is 1036
-run/0: product 0 is 1036
-mem/0: storing 1036 in location 1200
-run/0: instruction write/12
-run/0: {name: "dest", value: 7, type: 2-1, properties: ["dest": "address":"location", "deref": ]} <- copy/1 {name: "val", value: 2, type: 1, properties: ["val": "location"]}
-run/0: ingredient 0 is val
-mem/0: location 1195 is 34
-mem/0: location 1200 is 1036
-mem/0: storing 34 in location 1036
-run/0: instruction write/13
-run/0: {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]} <- add/2 {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is free
-mem/0: location 1199 is 1032
-mem/0: location 1032 is 1
-run/0: ingredient 1 is 1
-run/0: product 0 is 2
-mem/0: location 1199 is 1032
-mem/0: storing 2 in location 1032
-run/0: instruction write/15
-run/0: {name: "len", value: 8, type: 1, properties: ["len": "integer"]} <- length/28 {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}
-mem/0: location 1198 is 1034
-mem/0: storing 2 in location 1201
-run/0: instruction write/16
-run/0: {name: "at-end?", value: 9, type: 3, properties: ["at-end?": "boolean"]} <- greater-or-equal/16 {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}, {name: "len", value: 8, type: 1, properties: ["len": "integer"]}
-run/0: ingredient 0 is free
-mem/0: location 1199 is 1032
-mem/0: location 1032 is 2
-run/0: ingredient 1 is len
-mem/0: location 1201 is 2
-run/0: product 0 is 1
-mem/0: storing 1 in location 1202
-run/0: instruction write/17
-run/0: break-unless/12 {name: "at-end?", value: 9, type: 3, properties: ["at-end?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
-mem/0: location 1202 is 1
-run/0: ingredient 0 is 1
-run/0: jump-unless fell through
-run/0: instruction write/18
-run/0: {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
-mem/0: location 1199 is 1032
-mem/0: storing 0 in location 1032
-run/0: instruction write/20
-run/0: reply/33 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "same-as-ingredient": "0"]}
-mem/0: location 1194 is 1031
-run/0: result 0 is 1031
-mem/0: storing 1031 in location 1
-run/0: instruction run1001/6
-run/0: {name: "4", value: 4, type: 1, properties: ["4": "integer"]} <- get/24 {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
-run/0: ingredient 0 is 1
-mem/0: location 1 is 1031
-run/0: ingredient 1 is first-free
-run/0: address to copy is 1032
-run/0: its type is 1
-mem/0: location 1032 is 0
-run/0: product 0 is 0
-mem/0: storing 0 in location 4
-run/0: instruction run1001/7
-run/0: {name: "_", value: 0, type: 0, properties: ["_": "dummy"]}, {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]} <- read/111 {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]}
-mem/0: location 1 is 1031
-run/0: instruction read/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1285
-run/0: instruction read/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/30 
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1287
-run/0: instruction read/3
-run/0: {name: "empty", value: 2, type: 3, properties: ["empty": "boolean"]} <- channel-empty?/112 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]}
-mem/0: location 1287 is 1031
-run/0: instruction channel-empty?/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1316
-run/0: instruction channel-empty?/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/30 
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1318
-run/0: instruction channel-empty?/2
-run/0: {name: "full", value: 2, type: 1, properties: ["full": "integer"]} <- get/24 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
-run/0: ingredient 0 is chan
-mem/0: location 1318 is 1031
-run/0: ingredient 1 is first-full
-run/0: address to copy is 1031
-run/0: its type is 1
-mem/0: location 1031 is 1
-run/0: product 0 is 1
-mem/0: storing 1 in location 1319
-run/0: instruction channel-empty?/3
-run/0: {name: "free", value: 3, type: 1, properties: ["free": "integer"]} <- get/24 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
-run/0: ingredient 0 is chan
-mem/0: location 1318 is 1031
-run/0: ingredient 1 is first-free
-run/0: address to copy is 1032
-run/0: its type is 1
-mem/0: location 1032 is 0
-run/0: product 0 is 0
-mem/0: storing 0 in location 1320
-run/0: instruction channel-empty?/4
-run/0: {name: "result", value: 4, type: 3, properties: ["result": "boolean"]} <- equal/13 {name: "full", value: 2, type: 1, properties: ["full": "integer"]}, {name: "free", value: 3, type: 1, properties: ["free": "integer"]}
-run/0: ingredient 0 is full
-mem/0: location 1319 is 1
-run/0: ingredient 1 is free
-mem/0: location 1320 is 0
-run/0: product 0 is 0
-mem/0: storing 0 in location 1321
-run/0: instruction channel-empty?/5
-run/0: reply/33 {name: "result", value: 4, type: 3, properties: ["result": "boolean"]}
-mem/0: location 1321 is 0
-run/0: result 0 is 0
-mem/0: storing 0 in location 1288
-run/0: instruction read/4
-run/0: break-unless/12 {name: "empty", value: 2, type: 3, properties: ["empty": "boolean"]}, {name: "", value: 2, type: , properties: ["": ]}
-mem/0: location 1288 is 0
-run/0: ingredient 0 is 0
-run/0: ingredient 1 is 
-run/0: jumping to instruction 7
-run/0: instruction read/8
-run/0: {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer"]} <- get-address/25 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
-run/0: ingredient 0 is chan
-mem/0: location 1287 is 1031
-run/0: ingredient 1 is first-full
-run/0: address to copy is 1031
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1290
-run/0: instruction read/9
-run/0: {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location"]} <- get/24 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is chan
-mem/0: location 1287 is 1031
-run/0: ingredient 1 is data
-run/0: address to copy is 1033
-run/0: its type is 2
-mem/0: location 1033 is 1034
-run/0: product 0 is 1034
-mem/0: storing 1034 in location 1291
-run/0: instruction read/10
-run/0: {name: "result", value: 6, type: 1, properties: ["result": "location"]} <- index/26 {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}, {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer", "deref": ]}
-run/0: ingredient 0 is {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}
-mem/0: location 1291 is 1034
-run/0: ingredient 1 is {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer", "deref": ]}
-mem/0: location 1290 is 1031
-mem/0: location 1031 is 1
-run/0: address to copy is 1036
-run/0: its type is 1
-mem/0: location 1036 is 34
-run/0: product 0 is 34
-mem/0: storing 34 in location 1292
-run/0: instruction read/11
-run/0: {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer", "deref": ]} <- add/2 {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is full
-mem/0: location 1290 is 1031
-mem/0: location 1031 is 1
-run/0: ingredient 1 is 1
-run/0: product 0 is 2
-mem/0: location 1290 is 1031
-mem/0: storing 2 in location 1031
-run/0: instruction read/13
-run/0: {name: "len", value: 7, type: 1, properties: ["len": "integer"]} <- length/28 {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}
-mem/0: location 1291 is 1034
-mem/0: storing 2 in location 1293
-run/0: instruction read/14
-run/0: {name: "at-end?", value: 8, type: 3, properties: ["at-end?": "boolean"]} <- greater-or-equal/16 {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer", "deref": ]}, {name: "len", value: 7, type: 1, properties: ["len": "integer"]}
-run/0: ingredient 0 is full
-mem/0: location 1290 is 1031
-mem/0: location 1031 is 2
-run/0: ingredient 1 is len
-mem/0: location 1293 is 2
-run/0: product 0 is 1
-mem/0: storing 1 in location 1294
-run/0: instruction read/15
-run/0: break-unless/12 {name: "at-end?", value: 8, type: 3, properties: ["at-end?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
-mem/0: location 1294 is 1
-run/0: ingredient 0 is 1
-run/0: jump-unless fell through
-run/0: instruction read/16
-run/0: {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer", "deref": ]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
-mem/0: location 1290 is 1031
-mem/0: storing 0 in location 1031
-run/0: instruction read/18
-run/0: reply/33 {name: "result", value: 6, type: 1, properties: ["result": "location"]}, {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "same-as-ingredient": "0"]}
-mem/0: location 1292 is 34
-mem/0: location 1287 is 1031
-run/0: result 0 is 34
-run/0: result 1 is 1031
-mem/0: storing 1031 in location 1
-run/0: instruction run1001/8
-run/0: {name: "5", value: 5, type: 1, properties: ["5": "integer"]} <- get/24 {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
-run/0: ingredient 0 is 1
-mem/0: location 1 is 1031
-run/0: ingredient 1 is first-full
-run/0: address to copy is 1031
-run/0: its type is 1
-mem/0: location 1031 is 0
-run/0: product 0 is 0
-mem/0: storing 0 in location 5
-run/0: instruction channel-wrap/1
-run/0: memory-should-contain/46 {name: "
-    2 <- 1  # first-free after first write
-    3 <- 1  # first-full after first read
-    4 <- 0  # first-free after second write, wrapped
-    5 <- 0  # first-full after second read, wrapped
-  ", value: 0, type: 0, properties: ["
-    2 <- 1  # first-free after first write
-    3 <- 1  # first-full after first read
-    4 <- 0  # first-free after second write, wrapped
-    5 <- 0  # first-full after second read, wrapped
-  ": "literal-string"]}
-run/0: checking location 2
-run/0: checking location 3
-run/0: checking location 4
-run/0: checking location 5
diff --git a/cpp/.traces/channel-write-full b/cpp/.traces/channel-write-full
deleted file mode 100644
index d91949f4..00000000
--- a/cpp/.traces/channel-write-full
+++ /dev/null
@@ -1,457 +0,0 @@
-parse/0: instruction: run
-parse/0:   ingredient: {name: "
-    1:address:channel <- init-channel 1:literal/capacity
-    1:address:channel <- write 1:address:channel, 34:literal
-    2:integer <- channel-empty? 1:address:channel
-    3:integer <- channel-full? 1:address:channel
-  ", value: 0, type: 0, properties: ["
-    1:address:channel <- init-channel 1:literal/capacity
-    1:address:channel <- write 1:address:channel, 34:literal
-    2:integer <- channel-empty? 1:address:channel
-    3:integer <- channel-full? 1:address:channel
-  ": "literal-string"]}
-parse/0: instruction: memory-should-contain
-parse/0:   ingredient: {name: "
-    2 <- 0  # empty?
-    3 <- 1  # full?
-  ", value: 0, type: 0, properties: ["
-    2 <- 0  # empty?
-    3 <- 1  # full?
-  ": "literal-string"]}
-after-brace/0: recipe channel-write-full
-after-brace/0: run ...
-after-brace/0: memory-should-contain ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: channel-write-full
-run/0: instruction channel-write-full/0
-run/0: run/45 {name: "
-    1:address:channel <- init-channel 1:literal/capacity
-    1:address:channel <- write 1:address:channel, 34:literal
-    2:integer <- channel-empty? 1:address:channel
-    3:integer <- channel-full? 1:address:channel
-  ", value: 0, type: 0, properties: ["
-    1:address:channel <- init-channel 1:literal/capacity
-    1:address:channel <- write 1:address:channel, 34:literal
-    2:integer <- channel-empty? 1:address:channel
-    3:integer <- channel-full? 1:address:channel
-  ": "literal-string"]}
-parse/0: instruction: init-channel
-parse/0:   ingredient: {name: "1", value: 0, type: 0, properties: ["1": "literal", "capacity": ]}
-parse/0:   product: {name: "1", value: 0, type: 2-10, properties: ["1": "address":"channel"]}
-parse/0: instruction: write
-parse/0:   ingredient: {name: "1", value: 0, type: 2-10, properties: ["1": "address":"channel"]}
-parse/0:   ingredient: {name: "34", value: 0, type: 0, properties: ["34": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 2-10, properties: ["1": "address":"channel"]}
-parse/0: instruction: channel-empty?
-parse/0:   ingredient: {name: "1", value: 0, type: 2-10, properties: ["1": "address":"channel"]}
-parse/0:   product: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-parse/0: instruction: channel-full?
-parse/0:   ingredient: {name: "1", value: 0, type: 2-10, properties: ["1": "address":"channel"]}
-parse/0:   product: {name: "3", value: 0, type: 1, properties: ["3": "integer"]}
-after-brace/0: recipe run1001
-after-brace/0: init-channel ...
-after-brace/0: write ...
-after-brace/0: channel-empty? ...
-after-brace/0: channel-full? ...
-run/0: instruction run1001/0
-run/0: {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]} <- init-channel/108 {name: "1", value: 1, type: 0, properties: ["1": "literal", "capacity": ]}
-run/0: instruction init-channel/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1000
-run/0: instruction init-channel/1
-run/0: {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel"]} <- new/44 {name: "channel", value: 10, type: 0, properties: ["channel": "type"]}
-mem/0: new alloc: 1031
-mem/0: storing 1031 in location 1002
-run/0: instruction init-channel/2
-run/0: {name: "full", value: 2, type: 2-1, properties: ["full": "address":"integer"]} <- get-address/25 {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
-run/0: ingredient 0 is result
-mem/0: location 1002 is 1031
-run/0: ingredient 1 is first-full
-run/0: address to copy is 1031
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1003
-run/0: instruction init-channel/3
-run/0: {name: "full", value: 2, type: 2-1, properties: ["full": "address":"integer", "deref": ]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
-mem/0: location 1003 is 1031
-mem/0: storing 0 in location 1031
-run/0: instruction init-channel/4
-run/0: {name: "free", value: 3, type: 2-1, properties: ["free": "address":"integer"]} <- get-address/25 {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
-run/0: ingredient 0 is result
-mem/0: location 1002 is 1031
-run/0: ingredient 1 is first-free
-run/0: address to copy is 1032
-run/0: product 0 is 1032
-mem/0: storing 1032 in location 1004
-run/0: instruction init-channel/5
-run/0: {name: "free", value: 3, type: 2-1, properties: ["free": "address":"integer", "deref": ]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
-mem/0: location 1004 is 1032
-mem/0: storing 0 in location 1032
-run/0: instruction init-channel/6
-run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- next-ingredient/30 
-run/0: product 0 is 1
-mem/0: storing 1 in location 1005
-run/0: instruction init-channel/7
-run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- add/2 {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is capacity
-mem/0: location 1005 is 1
-run/0: ingredient 1 is 1
-run/0: product 0 is 2
-mem/0: storing 2 in location 1005
-run/0: instruction init-channel/8
-run/0: {name: "dest", value: 5, type: 2-2-5-1, properties: ["dest": "address":"address":"array":"location"]} <- get-address/25 {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is result
-mem/0: location 1002 is 1031
-run/0: ingredient 1 is data
-run/0: address to copy is 1033
-run/0: product 0 is 1033
-mem/0: storing 1033 in location 1006
-run/0: instruction init-channel/9
-run/0: {name: "dest", value: 5, type: 2-2-5-1, properties: ["dest": "address":"address":"array":"location", "deref": ]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}
-mem/0: location 1005 is 2
-mem/0: array size is 2
-mem/0: new alloc: 1034
-mem/0: location 1006 is 1033
-mem/0: storing 1034 in location 1033
-run/0: instruction init-channel/10
-run/0: reply/33 {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel"]}
-mem/0: location 1002 is 1031
-run/0: result 0 is 1031
-mem/0: storing 1031 in location 1
-run/0: instruction run1001/1
-run/0: {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]} <- write/109 {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]}, {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
-mem/0: location 1 is 1031
-run/0: instruction write/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1037
-run/0: instruction write/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/30 
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1039
-run/0: instruction write/2
-run/0: {name: "val", value: 2, type: 1, properties: ["val": "location"]} <- next-ingredient/30 
-run/0: product 0 is 34
-mem/0: storing 34 in location 1040
-run/0: instruction write/4
-run/0: {name: "full", value: 3, type: 3, properties: ["full": "boolean"]} <- channel-full?/110 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]}
-mem/0: location 1039 is 1031
-run/0: instruction channel-full?/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1068
-run/0: instruction channel-full?/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/30 
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1070
-run/0: instruction channel-full?/2
-run/0: {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]} <- get/24 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
-run/0: ingredient 0 is chan
-mem/0: location 1070 is 1031
-run/0: ingredient 1 is first-free
-run/0: address to copy is 1032
-run/0: its type is 1
-mem/0: location 1032 is 0
-run/0: product 0 is 0
-mem/0: storing 0 in location 1071
-run/0: instruction channel-full?/3
-run/0: {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]} <- add/2 {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is tmp
-mem/0: location 1071 is 0
-run/0: ingredient 1 is 1
-run/0: product 0 is 1
-mem/0: storing 1 in location 1071
-run/0: instruction channel-full?/5
-run/0: {name: "len", value: 3, type: 1, properties: ["len": "integer"]} <- channel-capacity/113 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]}
-mem/0: location 1070 is 1031
-run/0: instruction channel-capacity/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1099
-run/0: instruction channel-capacity/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/30 
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1101
-run/0: instruction channel-capacity/2
-run/0: {name: "q", value: 2, type: 2-5-1, properties: ["q": "address":"array":"location"]} <- get/24 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is chan
-mem/0: location 1101 is 1031
-run/0: ingredient 1 is data
-run/0: address to copy is 1033
-run/0: its type is 2
-mem/0: location 1033 is 1034
-run/0: product 0 is 1034
-mem/0: storing 1034 in location 1102
-run/0: instruction channel-capacity/3
-run/0: {name: "result", value: 3, type: 1, properties: ["result": "integer"]} <- length/28 {name: "q", value: 2, type: 2-5-1, properties: ["q": "address":"array":"location", "deref": ]}
-mem/0: location 1102 is 1034
-mem/0: storing 2 in location 1103
-run/0: instruction channel-capacity/4
-run/0: reply/33 {name: "result", value: 3, type: 1, properties: ["result": "integer"]}
-mem/0: location 1103 is 2
-run/0: result 0 is 2
-mem/0: storing 2 in location 1072
-run/0: instruction channel-full?/6
-run/0: {name: "at-end?", value: 4, type: 3, properties: ["at-end?": "boolean"]} <- greater-or-equal/16 {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}, {name: "len", value: 3, type: 1, properties: ["len": "integer"]}
-run/0: ingredient 0 is tmp
-mem/0: location 1071 is 1
-run/0: ingredient 1 is len
-mem/0: location 1072 is 2
-run/0: product 0 is 0
-mem/0: storing 0 in location 1073
-run/0: instruction channel-full?/7
-run/0: break-unless/12 {name: "at-end?", value: 4, type: 3, properties: ["at-end?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
-mem/0: location 1073 is 0
-run/0: ingredient 0 is 0
-run/0: ingredient 1 is 
-run/0: jumping to instruction 9
-run/0: instruction channel-full?/10
-run/0: {name: "full", value: 5, type: 1, properties: ["full": "integer"]} <- get/24 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
-run/0: ingredient 0 is chan
-mem/0: location 1070 is 1031
-run/0: ingredient 1 is first-full
-run/0: address to copy is 1031
-run/0: its type is 1
-mem/0: location 1031 is 0
-run/0: product 0 is 0
-mem/0: storing 0 in location 1074
-run/0: instruction channel-full?/11
-run/0: {name: "result", value: 6, type: 3, properties: ["result": "boolean"]} <- equal/13 {name: "full", value: 5, type: 1, properties: ["full": "integer"]}, {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}
-run/0: ingredient 0 is full
-mem/0: location 1074 is 0
-run/0: ingredient 1 is tmp
-mem/0: location 1071 is 1
-run/0: product 0 is 0
-mem/0: storing 0 in location 1075
-run/0: instruction channel-full?/12
-run/0: reply/33 {name: "result", value: 6, type: 3, properties: ["result": "boolean"]}
-mem/0: location 1075 is 0
-run/0: result 0 is 0
-mem/0: storing 0 in location 1041
-run/0: instruction write/5
-run/0: break-unless/12 {name: "full", value: 3, type: 3, properties: ["full": "boolean"]}, {name: "", value: 2, type: , properties: ["": ]}
-mem/0: location 1041 is 0
-run/0: ingredient 0 is 0
-run/0: ingredient 1 is 
-run/0: jumping to instruction 8
-run/0: instruction write/9
-run/0: {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location"]} <- get/24 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is chan
-mem/0: location 1039 is 1031
-run/0: ingredient 1 is data
-run/0: address to copy is 1033
-run/0: its type is 2
-mem/0: location 1033 is 1034
-run/0: product 0 is 1034
-mem/0: storing 1034 in location 1043
-run/0: instruction write/10
-run/0: {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer"]} <- get-address/25 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
-run/0: ingredient 0 is chan
-mem/0: location 1039 is 1031
-run/0: ingredient 1 is first-free
-run/0: address to copy is 1032
-run/0: product 0 is 1032
-mem/0: storing 1032 in location 1044
-run/0: instruction write/11
-run/0: {name: "dest", value: 7, type: 2-1, properties: ["dest": "address":"location"]} <- index-address/27 {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}, {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}
-run/0: ingredient 0 is circular-buffer
-mem/0: location 1043 is 1034
-run/0: ingredient 1 is {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}
-mem/0: location 1044 is 1032
-mem/0: location 1032 is 0
-run/0: address to copy is 1035
-run/0: product 0 is 1035
-mem/0: storing 1035 in location 1045
-run/0: instruction write/12
-run/0: {name: "dest", value: 7, type: 2-1, properties: ["dest": "address":"location", "deref": ]} <- copy/1 {name: "val", value: 2, type: 1, properties: ["val": "location"]}
-run/0: ingredient 0 is val
-mem/0: location 1040 is 34
-mem/0: location 1045 is 1035
-mem/0: storing 34 in location 1035
-run/0: instruction write/13
-run/0: {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]} <- add/2 {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is free
-mem/0: location 1044 is 1032
-mem/0: location 1032 is 0
-run/0: ingredient 1 is 1
-run/0: product 0 is 1
-mem/0: location 1044 is 1032
-mem/0: storing 1 in location 1032
-run/0: instruction write/15
-run/0: {name: "len", value: 8, type: 1, properties: ["len": "integer"]} <- length/28 {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}
-mem/0: location 1043 is 1034
-mem/0: storing 2 in location 1046
-run/0: instruction write/16
-run/0: {name: "at-end?", value: 9, type: 3, properties: ["at-end?": "boolean"]} <- greater-or-equal/16 {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}, {name: "len", value: 8, type: 1, properties: ["len": "integer"]}
-run/0: ingredient 0 is free
-mem/0: location 1044 is 1032
-mem/0: location 1032 is 1
-run/0: ingredient 1 is len
-mem/0: location 1046 is 2
-run/0: product 0 is 0
-mem/0: storing 0 in location 1047
-run/0: instruction write/17
-run/0: break-unless/12 {name: "at-end?", value: 9, type: 3, properties: ["at-end?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
-mem/0: location 1047 is 0
-run/0: ingredient 0 is 0
-run/0: ingredient 1 is 
-run/0: jumping to instruction 19
-run/0: instruction write/20
-run/0: reply/33 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "same-as-ingredient": "0"]}
-mem/0: location 1039 is 1031
-run/0: result 0 is 1031
-mem/0: storing 1031 in location 1
-run/0: instruction run1001/2
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- channel-empty?/112 {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]}
-mem/0: location 1 is 1031
-run/0: instruction channel-empty?/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1130
-run/0: instruction channel-empty?/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/30 
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1132
-run/0: instruction channel-empty?/2
-run/0: {name: "full", value: 2, type: 1, properties: ["full": "integer"]} <- get/24 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
-run/0: ingredient 0 is chan
-mem/0: location 1132 is 1031
-run/0: ingredient 1 is first-full
-run/0: address to copy is 1031
-run/0: its type is 1
-mem/0: location 1031 is 0
-run/0: product 0 is 0
-mem/0: storing 0 in location 1133
-run/0: instruction channel-empty?/3
-run/0: {name: "free", value: 3, type: 1, properties: ["free": "integer"]} <- get/24 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
-run/0: ingredient 0 is chan
-mem/0: location 1132 is 1031
-run/0: ingredient 1 is first-free
-run/0: address to copy is 1032
-run/0: its type is 1
-mem/0: location 1032 is 1
-run/0: product 0 is 1
-mem/0: storing 1 in location 1134
-run/0: instruction channel-empty?/4
-run/0: {name: "result", value: 4, type: 3, properties: ["result": "boolean"]} <- equal/13 {name: "full", value: 2, type: 1, properties: ["full": "integer"]}, {name: "free", value: 3, type: 1, properties: ["free": "integer"]}
-run/0: ingredient 0 is full
-mem/0: location 1133 is 0
-run/0: ingredient 1 is free
-mem/0: location 1134 is 1
-run/0: product 0 is 0
-mem/0: storing 0 in location 1135
-run/0: instruction channel-empty?/5
-run/0: reply/33 {name: "result", value: 4, type: 3, properties: ["result": "boolean"]}
-mem/0: location 1135 is 0
-run/0: result 0 is 0
-mem/0: storing 0 in location 2
-run/0: instruction run1001/3
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- channel-full?/110 {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]}
-mem/0: location 1 is 1031
-run/0: instruction channel-full?/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1161
-run/0: instruction channel-full?/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/30 
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1163
-run/0: instruction channel-full?/2
-run/0: {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]} <- get/24 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
-run/0: ingredient 0 is chan
-mem/0: location 1163 is 1031
-run/0: ingredient 1 is first-free
-run/0: address to copy is 1032
-run/0: its type is 1
-mem/0: location 1032 is 1
-run/0: product 0 is 1
-mem/0: storing 1 in location 1164
-run/0: instruction channel-full?/3
-run/0: {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]} <- add/2 {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is tmp
-mem/0: location 1164 is 1
-run/0: ingredient 1 is 1
-run/0: product 0 is 2
-mem/0: storing 2 in location 1164
-run/0: instruction channel-full?/5
-run/0: {name: "len", value: 3, type: 1, properties: ["len": "integer"]} <- channel-capacity/113 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]}
-mem/0: location 1163 is 1031
-run/0: instruction channel-capacity/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1192
-run/0: instruction channel-capacity/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/30 
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1194
-run/0: instruction channel-capacity/2
-run/0: {name: "q", value: 2, type: 2-5-1, properties: ["q": "address":"array":"location"]} <- get/24 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is chan
-mem/0: location 1194 is 1031
-run/0: ingredient 1 is data
-run/0: address to copy is 1033
-run/0: its type is 2
-mem/0: location 1033 is 1034
-run/0: product 0 is 1034
-mem/0: storing 1034 in location 1195
-run/0: instruction channel-capacity/3
-run/0: {name: "result", value: 3, type: 1, properties: ["result": "integer"]} <- length/28 {name: "q", value: 2, type: 2-5-1, properties: ["q": "address":"array":"location", "deref": ]}
-mem/0: location 1195 is 1034
-mem/0: storing 2 in location 1196
-run/0: instruction channel-capacity/4
-run/0: reply/33 {name: "result", value: 3, type: 1, properties: ["result": "integer"]}
-mem/0: location 1196 is 2
-run/0: result 0 is 2
-mem/0: storing 2 in location 1165
-run/0: instruction channel-full?/6
-run/0: {name: "at-end?", value: 4, type: 3, properties: ["at-end?": "boolean"]} <- greater-or-equal/16 {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}, {name: "len", value: 3, type: 1, properties: ["len": "integer"]}
-run/0: ingredient 0 is tmp
-mem/0: location 1164 is 2
-run/0: ingredient 1 is len
-mem/0: location 1165 is 2
-run/0: product 0 is 1
-mem/0: storing 1 in location 1166
-run/0: instruction channel-full?/7
-run/0: break-unless/12 {name: "at-end?", value: 4, type: 3, properties: ["at-end?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
-mem/0: location 1166 is 1
-run/0: ingredient 0 is 1
-run/0: jump-unless fell through
-run/0: instruction channel-full?/8
-run/0: {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
-mem/0: storing 0 in location 1164
-run/0: instruction channel-full?/10
-run/0: {name: "full", value: 5, type: 1, properties: ["full": "integer"]} <- get/24 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
-run/0: ingredient 0 is chan
-mem/0: location 1163 is 1031
-run/0: ingredient 1 is first-full
-run/0: address to copy is 1031
-run/0: its type is 1
-mem/0: location 1031 is 0
-run/0: product 0 is 0
-mem/0: storing 0 in location 1167
-run/0: instruction channel-full?/11
-run/0: {name: "result", value: 6, type: 3, properties: ["result": "boolean"]} <- equal/13 {name: "full", value: 5, type: 1, properties: ["full": "integer"]}, {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}
-run/0: ingredient 0 is full
-mem/0: location 1167 is 0
-run/0: ingredient 1 is tmp
-mem/0: location 1164 is 0
-run/0: product 0 is 1
-mem/0: storing 1 in location 1168
-run/0: instruction channel-full?/12
-run/0: reply/33 {name: "result", value: 6, type: 3, properties: ["result": "boolean"]}
-mem/0: location 1168 is 1
-run/0: result 0 is 1
-mem/0: storing 1 in location 3
-run/0: instruction channel-write-full/1
-run/0: memory-should-contain/46 {name: "
-    2 <- 0  # empty?
-    3 <- 1  # full?
-  ", value: 0, type: 0, properties: ["
-    2 <- 0  # empty?
-    3 <- 1  # full?
-  ": "literal-string"]}
-run/0: checking location 2
-run/0: checking location 3
diff --git a/cpp/.traces/channel-write-increments-free b/cpp/.traces/channel-write-increments-free
deleted file mode 100644
index aa3aa317..00000000
--- a/cpp/.traces/channel-write-increments-free
+++ /dev/null
@@ -1,339 +0,0 @@
-parse/0: instruction: run
-parse/0:   ingredient: {name: "
-    1:address:channel <- init-channel 3:literal/capacity
-    1:address:channel <- write 1:address:channel, 34:literal
-    2:integer <- get 1:address:channel/deref, first-full:offset
-    3:integer <- get 1:address:channel/deref, first-free:offset
-  ", value: 0, type: 0, properties: ["
-    1:address:channel <- init-channel 3:literal/capacity
-    1:address:channel <- write 1:address:channel, 34:literal
-    2:integer <- get 1:address:channel/deref, first-full:offset
-    3:integer <- get 1:address:channel/deref, first-free:offset
-  ": "literal-string"]}
-parse/0: instruction: memory-should-contain
-parse/0:   ingredient: {name: "
-    2 <- 0  # first-full
-    3 <- 1  # first-free
-  ", value: 0, type: 0, properties: ["
-    2 <- 0  # first-full
-    3 <- 1  # first-free
-  ": "literal-string"]}
-after-brace/0: recipe channel-write-increments-free
-after-brace/0: run ...
-after-brace/0: memory-should-contain ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: channel-write-increments-free
-run/0: instruction channel-write-increments-free/0
-run/0: run/45 {name: "
-    1:address:channel <- init-channel 3:literal/capacity
-    1:address:channel <- write 1:address:channel, 34:literal
-    2:integer <- get 1:address:channel/deref, first-full:offset
-    3:integer <- get 1:address:channel/deref, first-free:offset
-  ", value: 0, type: 0, properties: ["
-    1:address:channel <- init-channel 3:literal/capacity
-    1:address:channel <- write 1:address:channel, 34:literal
-    2:integer <- get 1:address:channel/deref, first-full:offset
-    3:integer <- get 1:address:channel/deref, first-free:offset
-  ": "literal-string"]}
-parse/0: instruction: init-channel
-parse/0:   ingredient: {name: "3", value: 0, type: 0, properties: ["3": "literal", "capacity": ]}
-parse/0:   product: {name: "1", value: 0, type: 2-10, properties: ["1": "address":"channel"]}
-parse/0: instruction: write
-parse/0:   ingredient: {name: "1", value: 0, type: 2-10, properties: ["1": "address":"channel"]}
-parse/0:   ingredient: {name: "34", value: 0, type: 0, properties: ["34": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 2-10, properties: ["1": "address":"channel"]}
-parse/0: instruction: get
-parse/0:   ingredient: {name: "1", value: 0, type: 2-10, properties: ["1": "address":"channel", "deref": ]}
-parse/0:   ingredient: {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
-parse/0:   product: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-parse/0: instruction: get
-parse/0:   ingredient: {name: "1", value: 0, type: 2-10, properties: ["1": "address":"channel", "deref": ]}
-parse/0:   ingredient: {name: "first-free", value: 0, type: 0, properties: ["first-free": "offset"]}
-parse/0:   product: {name: "3", value: 0, type: 1, properties: ["3": "integer"]}
-name/0: element first-full of type channel is at offset 0
-name/0: element first-free of type channel is at offset 1
-after-brace/0: recipe run1001
-after-brace/0: init-channel ...
-after-brace/0: write ...
-after-brace/0: get ...
-after-brace/0: get ...
-run/0: instruction run1001/0
-run/0: {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]} <- init-channel/108 {name: "3", value: 3, type: 0, properties: ["3": "literal", "capacity": ]}
-run/0: instruction init-channel/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1000
-run/0: instruction init-channel/1
-run/0: {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel"]} <- new/44 {name: "channel", value: 10, type: 0, properties: ["channel": "type"]}
-mem/0: new alloc: 1031
-mem/0: storing 1031 in location 1002
-run/0: instruction init-channel/2
-run/0: {name: "full", value: 2, type: 2-1, properties: ["full": "address":"integer"]} <- get-address/25 {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
-run/0: ingredient 0 is result
-mem/0: location 1002 is 1031
-run/0: ingredient 1 is first-full
-run/0: address to copy is 1031
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1003
-run/0: instruction init-channel/3
-run/0: {name: "full", value: 2, type: 2-1, properties: ["full": "address":"integer", "deref": ]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
-mem/0: location 1003 is 1031
-mem/0: storing 0 in location 1031
-run/0: instruction init-channel/4
-run/0: {name: "free", value: 3, type: 2-1, properties: ["free": "address":"integer"]} <- get-address/25 {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
-run/0: ingredient 0 is result
-mem/0: location 1002 is 1031
-run/0: ingredient 1 is first-free
-run/0: address to copy is 1032
-run/0: product 0 is 1032
-mem/0: storing 1032 in location 1004
-run/0: instruction init-channel/5
-run/0: {name: "free", value: 3, type: 2-1, properties: ["free": "address":"integer", "deref": ]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
-mem/0: location 1004 is 1032
-mem/0: storing 0 in location 1032
-run/0: instruction init-channel/6
-run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- next-ingredient/30 
-run/0: product 0 is 3
-mem/0: storing 3 in location 1005
-run/0: instruction init-channel/7
-run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- add/2 {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is capacity
-mem/0: location 1005 is 3
-run/0: ingredient 1 is 1
-run/0: product 0 is 4
-mem/0: storing 4 in location 1005
-run/0: instruction init-channel/8
-run/0: {name: "dest", value: 5, type: 2-2-5-1, properties: ["dest": "address":"address":"array":"location"]} <- get-address/25 {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is result
-mem/0: location 1002 is 1031
-run/0: ingredient 1 is data
-run/0: address to copy is 1033
-run/0: product 0 is 1033
-mem/0: storing 1033 in location 1006
-run/0: instruction init-channel/9
-run/0: {name: "dest", value: 5, type: 2-2-5-1, properties: ["dest": "address":"address":"array":"location", "deref": ]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}
-mem/0: location 1005 is 4
-mem/0: array size is 4
-mem/0: new alloc: 1034
-mem/0: location 1006 is 1033
-mem/0: storing 1034 in location 1033
-run/0: instruction init-channel/10
-run/0: reply/33 {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel"]}
-mem/0: location 1002 is 1031
-run/0: result 0 is 1031
-mem/0: storing 1031 in location 1
-run/0: instruction run1001/1
-run/0: {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]} <- write/109 {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]}, {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
-mem/0: location 1 is 1031
-run/0: instruction write/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1039
-run/0: instruction write/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/30 
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1041
-run/0: instruction write/2
-run/0: {name: "val", value: 2, type: 1, properties: ["val": "location"]} <- next-ingredient/30 
-run/0: product 0 is 34
-mem/0: storing 34 in location 1042
-run/0: instruction write/4
-run/0: {name: "full", value: 3, type: 3, properties: ["full": "boolean"]} <- channel-full?/110 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]}
-mem/0: location 1041 is 1031
-run/0: instruction channel-full?/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1070
-run/0: instruction channel-full?/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/30 
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1072
-run/0: instruction channel-full?/2
-run/0: {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]} <- get/24 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
-run/0: ingredient 0 is chan
-mem/0: location 1072 is 1031
-run/0: ingredient 1 is first-free
-run/0: address to copy is 1032
-run/0: its type is 1
-mem/0: location 1032 is 0
-run/0: product 0 is 0
-mem/0: storing 0 in location 1073
-run/0: instruction channel-full?/3
-run/0: {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]} <- add/2 {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is tmp
-mem/0: location 1073 is 0
-run/0: ingredient 1 is 1
-run/0: product 0 is 1
-mem/0: storing 1 in location 1073
-run/0: instruction channel-full?/5
-run/0: {name: "len", value: 3, type: 1, properties: ["len": "integer"]} <- channel-capacity/113 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]}
-mem/0: location 1072 is 1031
-run/0: instruction channel-capacity/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1101
-run/0: instruction channel-capacity/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/30 
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1103
-run/0: instruction channel-capacity/2
-run/0: {name: "q", value: 2, type: 2-5-1, properties: ["q": "address":"array":"location"]} <- get/24 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is chan
-mem/0: location 1103 is 1031
-run/0: ingredient 1 is data
-run/0: address to copy is 1033
-run/0: its type is 2
-mem/0: location 1033 is 1034
-run/0: product 0 is 1034
-mem/0: storing 1034 in location 1104
-run/0: instruction channel-capacity/3
-run/0: {name: "result", value: 3, type: 1, properties: ["result": "integer"]} <- length/28 {name: "q", value: 2, type: 2-5-1, properties: ["q": "address":"array":"location", "deref": ]}
-mem/0: location 1104 is 1034
-mem/0: storing 4 in location 1105
-run/0: instruction channel-capacity/4
-run/0: reply/33 {name: "result", value: 3, type: 1, properties: ["result": "integer"]}
-mem/0: location 1105 is 4
-run/0: result 0 is 4
-mem/0: storing 4 in location 1074
-run/0: instruction channel-full?/6
-run/0: {name: "at-end?", value: 4, type: 3, properties: ["at-end?": "boolean"]} <- greater-or-equal/16 {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}, {name: "len", value: 3, type: 1, properties: ["len": "integer"]}
-run/0: ingredient 0 is tmp
-mem/0: location 1073 is 1
-run/0: ingredient 1 is len
-mem/0: location 1074 is 4
-run/0: product 0 is 0
-mem/0: storing 0 in location 1075
-run/0: instruction channel-full?/7
-run/0: break-unless/12 {name: "at-end?", value: 4, type: 3, properties: ["at-end?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
-mem/0: location 1075 is 0
-run/0: ingredient 0 is 0
-run/0: ingredient 1 is 
-run/0: jumping to instruction 9
-run/0: instruction channel-full?/10
-run/0: {name: "full", value: 5, type: 1, properties: ["full": "integer"]} <- get/24 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
-run/0: ingredient 0 is chan
-mem/0: location 1072 is 1031
-run/0: ingredient 1 is first-full
-run/0: address to copy is 1031
-run/0: its type is 1
-mem/0: location 1031 is 0
-run/0: product 0 is 0
-mem/0: storing 0 in location 1076
-run/0: instruction channel-full?/11
-run/0: {name: "result", value: 6, type: 3, properties: ["result": "boolean"]} <- equal/13 {name: "full", value: 5, type: 1, properties: ["full": "integer"]}, {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}
-run/0: ingredient 0 is full
-mem/0: location 1076 is 0
-run/0: ingredient 1 is tmp
-mem/0: location 1073 is 1
-run/0: product 0 is 0
-mem/0: storing 0 in location 1077
-run/0: instruction channel-full?/12
-run/0: reply/33 {name: "result", value: 6, type: 3, properties: ["result": "boolean"]}
-mem/0: location 1077 is 0
-run/0: result 0 is 0
-mem/0: storing 0 in location 1043
-run/0: instruction write/5
-run/0: break-unless/12 {name: "full", value: 3, type: 3, properties: ["full": "boolean"]}, {name: "", value: 2, type: , properties: ["": ]}
-mem/0: location 1043 is 0
-run/0: ingredient 0 is 0
-run/0: ingredient 1 is 
-run/0: jumping to instruction 8
-run/0: instruction write/9
-run/0: {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location"]} <- get/24 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is chan
-mem/0: location 1041 is 1031
-run/0: ingredient 1 is data
-run/0: address to copy is 1033
-run/0: its type is 2
-mem/0: location 1033 is 1034
-run/0: product 0 is 1034
-mem/0: storing 1034 in location 1045
-run/0: instruction write/10
-run/0: {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer"]} <- get-address/25 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
-run/0: ingredient 0 is chan
-mem/0: location 1041 is 1031
-run/0: ingredient 1 is first-free
-run/0: address to copy is 1032
-run/0: product 0 is 1032
-mem/0: storing 1032 in location 1046
-run/0: instruction write/11
-run/0: {name: "dest", value: 7, type: 2-1, properties: ["dest": "address":"location"]} <- index-address/27 {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}, {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}
-run/0: ingredient 0 is circular-buffer
-mem/0: location 1045 is 1034
-run/0: ingredient 1 is {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}
-mem/0: location 1046 is 1032
-mem/0: location 1032 is 0
-run/0: address to copy is 1035
-run/0: product 0 is 1035
-mem/0: storing 1035 in location 1047
-run/0: instruction write/12
-run/0: {name: "dest", value: 7, type: 2-1, properties: ["dest": "address":"location", "deref": ]} <- copy/1 {name: "val", value: 2, type: 1, properties: ["val": "location"]}
-run/0: ingredient 0 is val
-mem/0: location 1042 is 34
-mem/0: location 1047 is 1035
-mem/0: storing 34 in location 1035
-run/0: instruction write/13
-run/0: {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]} <- add/2 {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is free
-mem/0: location 1046 is 1032
-mem/0: location 1032 is 0
-run/0: ingredient 1 is 1
-run/0: product 0 is 1
-mem/0: location 1046 is 1032
-mem/0: storing 1 in location 1032
-run/0: instruction write/15
-run/0: {name: "len", value: 8, type: 1, properties: ["len": "integer"]} <- length/28 {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}
-mem/0: location 1045 is 1034
-mem/0: storing 4 in location 1048
-run/0: instruction write/16
-run/0: {name: "at-end?", value: 9, type: 3, properties: ["at-end?": "boolean"]} <- greater-or-equal/16 {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}, {name: "len", value: 8, type: 1, properties: ["len": "integer"]}
-run/0: ingredient 0 is free
-mem/0: location 1046 is 1032
-mem/0: location 1032 is 1
-run/0: ingredient 1 is len
-mem/0: location 1048 is 4
-run/0: product 0 is 0
-mem/0: storing 0 in location 1049
-run/0: instruction write/17
-run/0: break-unless/12 {name: "at-end?", value: 9, type: 3, properties: ["at-end?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
-mem/0: location 1049 is 0
-run/0: ingredient 0 is 0
-run/0: ingredient 1 is 
-run/0: jumping to instruction 19
-run/0: instruction write/20
-run/0: reply/33 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "same-as-ingredient": "0"]}
-mem/0: location 1041 is 1031
-run/0: result 0 is 1031
-mem/0: storing 1031 in location 1
-run/0: instruction run1001/2
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- get/24 {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
-run/0: ingredient 0 is 1
-mem/0: location 1 is 1031
-run/0: ingredient 1 is first-full
-run/0: address to copy is 1031
-run/0: its type is 1
-mem/0: location 1031 is 0
-run/0: product 0 is 0
-mem/0: storing 0 in location 2
-run/0: instruction run1001/3
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- get/24 {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
-run/0: ingredient 0 is 1
-mem/0: location 1 is 1031
-run/0: ingredient 1 is first-free
-run/0: address to copy is 1032
-run/0: its type is 1
-mem/0: location 1032 is 1
-run/0: product 0 is 1
-mem/0: storing 1 in location 3
-run/0: instruction channel-write-increments-free/1
-run/0: memory-should-contain/46 {name: "
-    2 <- 0  # first-full
-    3 <- 1  # first-free
-  ", value: 0, type: 0, properties: ["
-    2 <- 0  # first-full
-    3 <- 1  # first-free
-  ": "literal-string"]}
-run/0: checking location 2
-run/0: checking location 3
diff --git a/cpp/.traces/channel-write-not-empty b/cpp/.traces/channel-write-not-empty
deleted file mode 100644
index 47b4f426..00000000
--- a/cpp/.traces/channel-write-not-empty
+++ /dev/null
@@ -1,454 +0,0 @@
-parse/0: instruction: run
-parse/0:   ingredient: {name: "
-    1:address:channel <- init-channel 3:literal/capacity
-    1:address:channel <- write 1:address:channel, 34:literal
-    2:integer <- channel-empty? 1:address:channel
-    3:integer <- channel-full? 1:address:channel
-  ", value: 0, type: 0, properties: ["
-    1:address:channel <- init-channel 3:literal/capacity
-    1:address:channel <- write 1:address:channel, 34:literal
-    2:integer <- channel-empty? 1:address:channel
-    3:integer <- channel-full? 1:address:channel
-  ": "literal-string"]}
-parse/0: instruction: memory-should-contain
-parse/0:   ingredient: {name: "
-    2 <- 0  # empty?
-    3 <- 0  # full?
-  ", value: 0, type: 0, properties: ["
-    2 <- 0  # empty?
-    3 <- 0  # full?
-  ": "literal-string"]}
-after-brace/0: recipe channel-write-not-empty
-after-brace/0: run ...
-after-brace/0: memory-should-contain ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: channel-write-not-empty
-run/0: instruction channel-write-not-empty/0
-run/0: run/45 {name: "
-    1:address:channel <- init-channel 3:literal/capacity
-    1:address:channel <- write 1:address:channel, 34:literal
-    2:integer <- channel-empty? 1:address:channel
-    3:integer <- channel-full? 1:address:channel
-  ", value: 0, type: 0, properties: ["
-    1:address:channel <- init-channel 3:literal/capacity
-    1:address:channel <- write 1:address:channel, 34:literal
-    2:integer <- channel-empty? 1:address:channel
-    3:integer <- channel-full? 1:address:channel
-  ": "literal-string"]}
-parse/0: instruction: init-channel
-parse/0:   ingredient: {name: "3", value: 0, type: 0, properties: ["3": "literal", "capacity": ]}
-parse/0:   product: {name: "1", value: 0, type: 2-10, properties: ["1": "address":"channel"]}
-parse/0: instruction: write
-parse/0:   ingredient: {name: "1", value: 0, type: 2-10, properties: ["1": "address":"channel"]}
-parse/0:   ingredient: {name: "34", value: 0, type: 0, properties: ["34": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 2-10, properties: ["1": "address":"channel"]}
-parse/0: instruction: channel-empty?
-parse/0:   ingredient: {name: "1", value: 0, type: 2-10, properties: ["1": "address":"channel"]}
-parse/0:   product: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-parse/0: instruction: channel-full?
-parse/0:   ingredient: {name: "1", value: 0, type: 2-10, properties: ["1": "address":"channel"]}
-parse/0:   product: {name: "3", value: 0, type: 1, properties: ["3": "integer"]}
-after-brace/0: recipe run1001
-after-brace/0: init-channel ...
-after-brace/0: write ...
-after-brace/0: channel-empty? ...
-after-brace/0: channel-full? ...
-run/0: instruction run1001/0
-run/0: {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]} <- init-channel/108 {name: "3", value: 3, type: 0, properties: ["3": "literal", "capacity": ]}
-run/0: instruction init-channel/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1000
-run/0: instruction init-channel/1
-run/0: {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel"]} <- new/44 {name: "channel", value: 10, type: 0, properties: ["channel": "type"]}
-mem/0: new alloc: 1031
-mem/0: storing 1031 in location 1002
-run/0: instruction init-channel/2
-run/0: {name: "full", value: 2, type: 2-1, properties: ["full": "address":"integer"]} <- get-address/25 {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
-run/0: ingredient 0 is result
-mem/0: location 1002 is 1031
-run/0: ingredient 1 is first-full
-run/0: address to copy is 1031
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1003
-run/0: instruction init-channel/3
-run/0: {name: "full", value: 2, type: 2-1, properties: ["full": "address":"integer", "deref": ]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
-mem/0: location 1003 is 1031
-mem/0: storing 0 in location 1031
-run/0: instruction init-channel/4
-run/0: {name: "free", value: 3, type: 2-1, properties: ["free": "address":"integer"]} <- get-address/25 {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
-run/0: ingredient 0 is result
-mem/0: location 1002 is 1031
-run/0: ingredient 1 is first-free
-run/0: address to copy is 1032
-run/0: product 0 is 1032
-mem/0: storing 1032 in location 1004
-run/0: instruction init-channel/5
-run/0: {name: "free", value: 3, type: 2-1, properties: ["free": "address":"integer", "deref": ]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
-mem/0: location 1004 is 1032
-mem/0: storing 0 in location 1032
-run/0: instruction init-channel/6
-run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- next-ingredient/30 
-run/0: product 0 is 3
-mem/0: storing 3 in location 1005
-run/0: instruction init-channel/7
-run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- add/2 {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is capacity
-mem/0: location 1005 is 3
-run/0: ingredient 1 is 1
-run/0: product 0 is 4
-mem/0: storing 4 in location 1005
-run/0: instruction init-channel/8
-run/0: {name: "dest", value: 5, type: 2-2-5-1, properties: ["dest": "address":"address":"array":"location"]} <- get-address/25 {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is result
-mem/0: location 1002 is 1031
-run/0: ingredient 1 is data
-run/0: address to copy is 1033
-run/0: product 0 is 1033
-mem/0: storing 1033 in location 1006
-run/0: instruction init-channel/9
-run/0: {name: "dest", value: 5, type: 2-2-5-1, properties: ["dest": "address":"address":"array":"location", "deref": ]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}
-mem/0: location 1005 is 4
-mem/0: array size is 4
-mem/0: new alloc: 1034
-mem/0: location 1006 is 1033
-mem/0: storing 1034 in location 1033
-run/0: instruction init-channel/10
-run/0: reply/33 {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel"]}
-mem/0: location 1002 is 1031
-run/0: result 0 is 1031
-mem/0: storing 1031 in location 1
-run/0: instruction run1001/1
-run/0: {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]} <- write/109 {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]}, {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
-mem/0: location 1 is 1031
-run/0: instruction write/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1039
-run/0: instruction write/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/30 
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1041
-run/0: instruction write/2
-run/0: {name: "val", value: 2, type: 1, properties: ["val": "location"]} <- next-ingredient/30 
-run/0: product 0 is 34
-mem/0: storing 34 in location 1042
-run/0: instruction write/4
-run/0: {name: "full", value: 3, type: 3, properties: ["full": "boolean"]} <- channel-full?/110 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]}
-mem/0: location 1041 is 1031
-run/0: instruction channel-full?/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1070
-run/0: instruction channel-full?/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/30 
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1072
-run/0: instruction channel-full?/2
-run/0: {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]} <- get/24 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
-run/0: ingredient 0 is chan
-mem/0: location 1072 is 1031
-run/0: ingredient 1 is first-free
-run/0: address to copy is 1032
-run/0: its type is 1
-mem/0: location 1032 is 0
-run/0: product 0 is 0
-mem/0: storing 0 in location 1073
-run/0: instruction channel-full?/3
-run/0: {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]} <- add/2 {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is tmp
-mem/0: location 1073 is 0
-run/0: ingredient 1 is 1
-run/0: product 0 is 1
-mem/0: storing 1 in location 1073
-run/0: instruction channel-full?/5
-run/0: {name: "len", value: 3, type: 1, properties: ["len": "integer"]} <- channel-capacity/113 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]}
-mem/0: location 1072 is 1031
-run/0: instruction channel-capacity/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1101
-run/0: instruction channel-capacity/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/30 
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1103
-run/0: instruction channel-capacity/2
-run/0: {name: "q", value: 2, type: 2-5-1, properties: ["q": "address":"array":"location"]} <- get/24 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is chan
-mem/0: location 1103 is 1031
-run/0: ingredient 1 is data
-run/0: address to copy is 1033
-run/0: its type is 2
-mem/0: location 1033 is 1034
-run/0: product 0 is 1034
-mem/0: storing 1034 in location 1104
-run/0: instruction channel-capacity/3
-run/0: {name: "result", value: 3, type: 1, properties: ["result": "integer"]} <- length/28 {name: "q", value: 2, type: 2-5-1, properties: ["q": "address":"array":"location", "deref": ]}
-mem/0: location 1104 is 1034
-mem/0: storing 4 in location 1105
-run/0: instruction channel-capacity/4
-run/0: reply/33 {name: "result", value: 3, type: 1, properties: ["result": "integer"]}
-mem/0: location 1105 is 4
-run/0: result 0 is 4
-mem/0: storing 4 in location 1074
-run/0: instruction channel-full?/6
-run/0: {name: "at-end?", value: 4, type: 3, properties: ["at-end?": "boolean"]} <- greater-or-equal/16 {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}, {name: "len", value: 3, type: 1, properties: ["len": "integer"]}
-run/0: ingredient 0 is tmp
-mem/0: location 1073 is 1
-run/0: ingredient 1 is len
-mem/0: location 1074 is 4
-run/0: product 0 is 0
-mem/0: storing 0 in location 1075
-run/0: instruction channel-full?/7
-run/0: break-unless/12 {name: "at-end?", value: 4, type: 3, properties: ["at-end?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
-mem/0: location 1075 is 0
-run/0: ingredient 0 is 0
-run/0: ingredient 1 is 
-run/0: jumping to instruction 9
-run/0: instruction channel-full?/10
-run/0: {name: "full", value: 5, type: 1, properties: ["full": "integer"]} <- get/24 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
-run/0: ingredient 0 is chan
-mem/0: location 1072 is 1031
-run/0: ingredient 1 is first-full
-run/0: address to copy is 1031
-run/0: its type is 1
-mem/0: location 1031 is 0
-run/0: product 0 is 0
-mem/0: storing 0 in location 1076
-run/0: instruction channel-full?/11
-run/0: {name: "result", value: 6, type: 3, properties: ["result": "boolean"]} <- equal/13 {name: "full", value: 5, type: 1, properties: ["full": "integer"]}, {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}
-run/0: ingredient 0 is full
-mem/0: location 1076 is 0
-run/0: ingredient 1 is tmp
-mem/0: location 1073 is 1
-run/0: product 0 is 0
-mem/0: storing 0 in location 1077
-run/0: instruction channel-full?/12
-run/0: reply/33 {name: "result", value: 6, type: 3, properties: ["result": "boolean"]}
-mem/0: location 1077 is 0
-run/0: result 0 is 0
-mem/0: storing 0 in location 1043
-run/0: instruction write/5
-run/0: break-unless/12 {name: "full", value: 3, type: 3, properties: ["full": "boolean"]}, {name: "", value: 2, type: , properties: ["": ]}
-mem/0: location 1043 is 0
-run/0: ingredient 0 is 0
-run/0: ingredient 1 is 
-run/0: jumping to instruction 8
-run/0: instruction write/9
-run/0: {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location"]} <- get/24 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is chan
-mem/0: location 1041 is 1031
-run/0: ingredient 1 is data
-run/0: address to copy is 1033
-run/0: its type is 2
-mem/0: location 1033 is 1034
-run/0: product 0 is 1034
-mem/0: storing 1034 in location 1045
-run/0: instruction write/10
-run/0: {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer"]} <- get-address/25 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
-run/0: ingredient 0 is chan
-mem/0: location 1041 is 1031
-run/0: ingredient 1 is first-free
-run/0: address to copy is 1032
-run/0: product 0 is 1032
-mem/0: storing 1032 in location 1046
-run/0: instruction write/11
-run/0: {name: "dest", value: 7, type: 2-1, properties: ["dest": "address":"location"]} <- index-address/27 {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}, {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}
-run/0: ingredient 0 is circular-buffer
-mem/0: location 1045 is 1034
-run/0: ingredient 1 is {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}
-mem/0: location 1046 is 1032
-mem/0: location 1032 is 0
-run/0: address to copy is 1035
-run/0: product 0 is 1035
-mem/0: storing 1035 in location 1047
-run/0: instruction write/12
-run/0: {name: "dest", value: 7, type: 2-1, properties: ["dest": "address":"location", "deref": ]} <- copy/1 {name: "val", value: 2, type: 1, properties: ["val": "location"]}
-run/0: ingredient 0 is val
-mem/0: location 1042 is 34
-mem/0: location 1047 is 1035
-mem/0: storing 34 in location 1035
-run/0: instruction write/13
-run/0: {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]} <- add/2 {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is free
-mem/0: location 1046 is 1032
-mem/0: location 1032 is 0
-run/0: ingredient 1 is 1
-run/0: product 0 is 1
-mem/0: location 1046 is 1032
-mem/0: storing 1 in location 1032
-run/0: instruction write/15
-run/0: {name: "len", value: 8, type: 1, properties: ["len": "integer"]} <- length/28 {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}
-mem/0: location 1045 is 1034
-mem/0: storing 4 in location 1048
-run/0: instruction write/16
-run/0: {name: "at-end?", value: 9, type: 3, properties: ["at-end?": "boolean"]} <- greater-or-equal/16 {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}, {name: "len", value: 8, type: 1, properties: ["len": "integer"]}
-run/0: ingredient 0 is free
-mem/0: location 1046 is 1032
-mem/0: location 1032 is 1
-run/0: ingredient 1 is len
-mem/0: location 1048 is 4
-run/0: product 0 is 0
-mem/0: storing 0 in location 1049
-run/0: instruction write/17
-run/0: break-unless/12 {name: "at-end?", value: 9, type: 3, properties: ["at-end?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
-mem/0: location 1049 is 0
-run/0: ingredient 0 is 0
-run/0: ingredient 1 is 
-run/0: jumping to instruction 19
-run/0: instruction write/20
-run/0: reply/33 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "same-as-ingredient": "0"]}
-mem/0: location 1041 is 1031
-run/0: result 0 is 1031
-mem/0: storing 1031 in location 1
-run/0: instruction run1001/2
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- channel-empty?/112 {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]}
-mem/0: location 1 is 1031
-run/0: instruction channel-empty?/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1132
-run/0: instruction channel-empty?/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/30 
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1134
-run/0: instruction channel-empty?/2
-run/0: {name: "full", value: 2, type: 1, properties: ["full": "integer"]} <- get/24 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
-run/0: ingredient 0 is chan
-mem/0: location 1134 is 1031
-run/0: ingredient 1 is first-full
-run/0: address to copy is 1031
-run/0: its type is 1
-mem/0: location 1031 is 0
-run/0: product 0 is 0
-mem/0: storing 0 in location 1135
-run/0: instruction channel-empty?/3
-run/0: {name: "free", value: 3, type: 1, properties: ["free": "integer"]} <- get/24 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
-run/0: ingredient 0 is chan
-mem/0: location 1134 is 1031
-run/0: ingredient 1 is first-free
-run/0: address to copy is 1032
-run/0: its type is 1
-mem/0: location 1032 is 1
-run/0: product 0 is 1
-mem/0: storing 1 in location 1136
-run/0: instruction channel-empty?/4
-run/0: {name: "result", value: 4, type: 3, properties: ["result": "boolean"]} <- equal/13 {name: "full", value: 2, type: 1, properties: ["full": "integer"]}, {name: "free", value: 3, type: 1, properties: ["free": "integer"]}
-run/0: ingredient 0 is full
-mem/0: location 1135 is 0
-run/0: ingredient 1 is free
-mem/0: location 1136 is 1
-run/0: product 0 is 0
-mem/0: storing 0 in location 1137
-run/0: instruction channel-empty?/5
-run/0: reply/33 {name: "result", value: 4, type: 3, properties: ["result": "boolean"]}
-mem/0: location 1137 is 0
-run/0: result 0 is 0
-mem/0: storing 0 in location 2
-run/0: instruction run1001/3
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- channel-full?/110 {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]}
-mem/0: location 1 is 1031
-run/0: instruction channel-full?/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1163
-run/0: instruction channel-full?/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/30 
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1165
-run/0: instruction channel-full?/2
-run/0: {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]} <- get/24 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
-run/0: ingredient 0 is chan
-mem/0: location 1165 is 1031
-run/0: ingredient 1 is first-free
-run/0: address to copy is 1032
-run/0: its type is 1
-mem/0: location 1032 is 1
-run/0: product 0 is 1
-mem/0: storing 1 in location 1166
-run/0: instruction channel-full?/3
-run/0: {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]} <- add/2 {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is tmp
-mem/0: location 1166 is 1
-run/0: ingredient 1 is 1
-run/0: product 0 is 2
-mem/0: storing 2 in location 1166
-run/0: instruction channel-full?/5
-run/0: {name: "len", value: 3, type: 1, properties: ["len": "integer"]} <- channel-capacity/113 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]}
-mem/0: location 1165 is 1031
-run/0: instruction channel-capacity/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1194
-run/0: instruction channel-capacity/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/30 
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1196
-run/0: instruction channel-capacity/2
-run/0: {name: "q", value: 2, type: 2-5-1, properties: ["q": "address":"array":"location"]} <- get/24 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is chan
-mem/0: location 1196 is 1031
-run/0: ingredient 1 is data
-run/0: address to copy is 1033
-run/0: its type is 2
-mem/0: location 1033 is 1034
-run/0: product 0 is 1034
-mem/0: storing 1034 in location 1197
-run/0: instruction channel-capacity/3
-run/0: {name: "result", value: 3, type: 1, properties: ["result": "integer"]} <- length/28 {name: "q", value: 2, type: 2-5-1, properties: ["q": "address":"array":"location", "deref": ]}
-mem/0: location 1197 is 1034
-mem/0: storing 4 in location 1198
-run/0: instruction channel-capacity/4
-run/0: reply/33 {name: "result", value: 3, type: 1, properties: ["result": "integer"]}
-mem/0: location 1198 is 4
-run/0: result 0 is 4
-mem/0: storing 4 in location 1167
-run/0: instruction channel-full?/6
-run/0: {name: "at-end?", value: 4, type: 3, properties: ["at-end?": "boolean"]} <- greater-or-equal/16 {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}, {name: "len", value: 3, type: 1, properties: ["len": "integer"]}
-run/0: ingredient 0 is tmp
-mem/0: location 1166 is 2
-run/0: ingredient 1 is len
-mem/0: location 1167 is 4
-run/0: product 0 is 0
-mem/0: storing 0 in location 1168
-run/0: instruction channel-full?/7
-run/0: break-unless/12 {name: "at-end?", value: 4, type: 3, properties: ["at-end?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
-mem/0: location 1168 is 0
-run/0: ingredient 0 is 0
-run/0: ingredient 1 is 
-run/0: jumping to instruction 9
-run/0: instruction channel-full?/10
-run/0: {name: "full", value: 5, type: 1, properties: ["full": "integer"]} <- get/24 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
-run/0: ingredient 0 is chan
-mem/0: location 1165 is 1031
-run/0: ingredient 1 is first-full
-run/0: address to copy is 1031
-run/0: its type is 1
-mem/0: location 1031 is 0
-run/0: product 0 is 0
-mem/0: storing 0 in location 1169
-run/0: instruction channel-full?/11
-run/0: {name: "result", value: 6, type: 3, properties: ["result": "boolean"]} <- equal/13 {name: "full", value: 5, type: 1, properties: ["full": "integer"]}, {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}
-run/0: ingredient 0 is full
-mem/0: location 1169 is 0
-run/0: ingredient 1 is tmp
-mem/0: location 1166 is 2
-run/0: product 0 is 0
-mem/0: storing 0 in location 1170
-run/0: instruction channel-full?/12
-run/0: reply/33 {name: "result", value: 6, type: 3, properties: ["result": "boolean"]}
-mem/0: location 1170 is 0
-run/0: result 0 is 0
-mem/0: storing 0 in location 3
-run/0: instruction channel-write-not-empty/1
-run/0: memory-should-contain/46 {name: "
-    2 <- 0  # empty?
-    3 <- 0  # full?
-  ", value: 0, type: 0, properties: ["
-    2 <- 0  # empty?
-    3 <- 0  # full?
-  ": "literal-string"]}
-run/0: checking location 2
-run/0: checking location 3
diff --git a/cpp/.traces/check_string_in_memory b/cpp/.traces/check_string_in_memory
deleted file mode 100644
index 783c9702..00000000
--- a/cpp/.traces/check_string_in_memory
+++ /dev/null
@@ -1,78 +0,0 @@
-parse/0: instruction: run
-parse/0:   ingredient: {name: "
-    1:integer <- copy 3:literal
-    2:character <- copy 97:literal  # 'a'
-    3:character <- copy 98:literal  # 'b'
-    4:character <- copy 99:literal  # 'c'
-  ", value: 0, type: 0, properties: ["
-    1:integer <- copy 3:literal
-    2:character <- copy 97:literal  # 'a'
-    3:character <- copy 98:literal  # 'b'
-    4:character <- copy 99:literal  # 'c'
-  ": "literal-string"]}
-parse/0: instruction: memory-should-contain
-parse/0:   ingredient: {name: "
-    1:string <- [abc]
-  ", value: 0, type: 0, properties: ["
-    1:string <- [abc]
-  ": "literal-string"]}
-after-brace/0: recipe check_string_in_memory
-after-brace/0: run ...
-after-brace/0: memory-should-contain ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: check_string_in_memory
-run/0: instruction check_string_in_memory/0
-run/0: run/45 {name: "
-    1:integer <- copy 3:literal
-    2:character <- copy 97:literal  # 'a'
-    3:character <- copy 98:literal  # 'b'
-    4:character <- copy 99:literal  # 'c'
-  ", value: 0, type: 0, properties: ["
-    1:integer <- copy 3:literal
-    2:character <- copy 97:literal  # 'a'
-    3:character <- copy 98:literal  # 'b'
-    4:character <- copy 99:literal  # 'c'
-  ": "literal-string"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "3", value: 0, type: 0, properties: ["3": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "97", value: 0, type: 0, properties: ["97": "literal"]}
-parse/0:   product: {name: "2", value: 0, type: 4, properties: ["2": "character"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "98", value: 0, type: 0, properties: ["98": "literal"]}
-parse/0:   product: {name: "3", value: 0, type: 4, properties: ["3": "character"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "99", value: 0, type: 0, properties: ["99": "literal"]}
-parse/0:   product: {name: "4", value: 0, type: 4, properties: ["4": "character"]}
-after-brace/0: recipe run1001
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: copy ...
-run/0: instruction run1001/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "3", value: 3, type: 0, properties: ["3": "literal"]}
-run/0: ingredient 0 is 3
-mem/0: storing 3 in location 1
-run/0: instruction run1001/1
-run/0: {name: "2", value: 2, type: 4, properties: ["2": "character"]} <- copy/1 {name: "97", value: 97, type: 0, properties: ["97": "literal"]}
-run/0: ingredient 0 is 97
-mem/0: storing 97 in location 2
-run/0: instruction run1001/2
-run/0: {name: "3", value: 3, type: 4, properties: ["3": "character"]} <- copy/1 {name: "98", value: 98, type: 0, properties: ["98": "literal"]}
-run/0: ingredient 0 is 98
-mem/0: storing 98 in location 3
-run/0: instruction run1001/3
-run/0: {name: "4", value: 4, type: 4, properties: ["4": "character"]} <- copy/1 {name: "99", value: 99, type: 0, properties: ["99": "literal"]}
-run/0: ingredient 0 is 99
-mem/0: storing 99 in location 4
-run/0: instruction check_string_in_memory/1
-run/0: memory-should-contain/46 {name: "
-    1:string <- [abc]
-  ", value: 0, type: 0, properties: ["
-    1:string <- [abc]
-  ": "literal-string"]}
-run/0: checking string length at 1
-run/0: checking location 2
-run/0: checking location 3
-run/0: checking location 4
diff --git a/cpp/.traces/check_trace b/cpp/.traces/check_trace
deleted file mode 100644
index 17b68c94..00000000
--- a/cpp/.traces/check_trace
+++ /dev/null
@@ -1,41 +0,0 @@
-parse/0: instruction: run
-parse/0:   ingredient: {name: "
-    1:integer <- add 2:literal, 2:literal
-  ", value: 0, type: 0, properties: ["
-    1:integer <- add 2:literal, 2:literal
-  ": "literal-string"]}
-parse/0: instruction: trace-should-contain
-parse/0:   ingredient: {name: "
-    mem: storing 4 in location 1
-  ", value: 0, type: 0, properties: ["
-    mem: storing 4 in location 1
-  ": "literal-string"]}
-after-brace/0: recipe check_trace
-after-brace/0: run ...
-after-brace/0: trace-should-contain ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: check_trace
-run/0: instruction check_trace/0
-run/0: run/45 {name: "
-    1:integer <- add 2:literal, 2:literal
-  ", value: 0, type: 0, properties: ["
-    1:integer <- add 2:literal, 2:literal
-  ": "literal-string"]}
-parse/0: instruction: add
-parse/0:   ingredient: {name: "2", value: 0, type: 0, properties: ["2": "literal"]}
-parse/0:   ingredient: {name: "2", value: 0, type: 0, properties: ["2": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-after-brace/0: recipe run1001
-after-brace/0: add ...
-run/0: instruction run1001/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- add/2 {name: "2", value: 2, type: 0, properties: ["2": "literal"]}, {name: "2", value: 2, type: 0, properties: ["2": "literal"]}
-run/0: ingredient 0 is 2
-run/0: ingredient 1 is 2
-run/0: product 0 is 4
-mem/0: storing 4 in location 1
-run/0: instruction check_trace/1
-run/0: trace-should-contain/47 {name: "
-    mem: storing 4 in location 1
-  ", value: 0, type: 0, properties: ["
-    mem: storing 4 in location 1
-  ": "literal-string"]}
diff --git a/cpp/.traces/check_trace_instruction b/cpp/.traces/check_trace_instruction
deleted file mode 100644
index a1642099..00000000
--- a/cpp/.traces/check_trace_instruction
+++ /dev/null
@@ -1,37 +0,0 @@
-parse/0: instruction: run
-parse/0:   ingredient: {name: "
-    trace [foo], [aaa]
-  ", value: 0, type: 0, properties: ["
-    trace [foo], [aaa]
-  ": "literal-string"]}
-parse/0: instruction: trace-should-contain
-parse/0:   ingredient: {name: "
-    foo: aaa
-  ", value: 0, type: 0, properties: ["
-    foo: aaa
-  ": "literal-string"]}
-after-brace/0: recipe check_trace_instruction
-after-brace/0: run ...
-after-brace/0: trace-should-contain ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: check_trace_instruction
-run/0: instruction check_trace_instruction/0
-run/0: run/45 {name: "
-    trace [foo], [aaa]
-  ", value: 0, type: 0, properties: ["
-    trace [foo], [aaa]
-  ": "literal-string"]}
-parse/0: instruction: trace
-parse/0:   ingredient: {name: "foo", value: 0, type: 0, properties: ["foo": "literal-string"]}
-parse/0:   ingredient: {name: "aaa", value: 0, type: 0, properties: ["aaa": "literal-string"]}
-after-brace/0: recipe run1001
-after-brace/0: trace ...
-run/0: instruction run1001/0
-run/0: trace/18 {name: "foo", value: 0, type: 0, properties: ["foo": "literal-string"]}, {name: "aaa", value: 0, type: 0, properties: ["aaa": "literal-string"]}
-foo/0: aaa
-run/0: instruction check_trace_instruction/1
-run/0: trace-should-contain/47 {name: "
-    foo: aaa
-  ", value: 0, type: 0, properties: ["
-    foo: aaa
-  ": "literal-string"]}
diff --git a/cpp/.traces/check_trace_negative b/cpp/.traces/check_trace_negative
deleted file mode 100644
index c65bac12..00000000
--- a/cpp/.traces/check_trace_negative
+++ /dev/null
@@ -1,41 +0,0 @@
-parse/0: instruction: run
-parse/0:   ingredient: {name: "
-    1:integer <- add 2:literal, 2:literal
-  ", value: 0, type: 0, properties: ["
-    1:integer <- add 2:literal, 2:literal
-  ": "literal-string"]}
-parse/0: instruction: trace-should-not-contain
-parse/0:   ingredient: {name: "
-    mem: storing 5 in location 1
-  ", value: 0, type: 0, properties: ["
-    mem: storing 5 in location 1
-  ": "literal-string"]}
-after-brace/0: recipe check_trace_negative
-after-brace/0: run ...
-after-brace/0: trace-should-not-contain ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: check_trace_negative
-run/0: instruction check_trace_negative/0
-run/0: run/45 {name: "
-    1:integer <- add 2:literal, 2:literal
-  ", value: 0, type: 0, properties: ["
-    1:integer <- add 2:literal, 2:literal
-  ": "literal-string"]}
-parse/0: instruction: add
-parse/0:   ingredient: {name: "2", value: 0, type: 0, properties: ["2": "literal"]}
-parse/0:   ingredient: {name: "2", value: 0, type: 0, properties: ["2": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-after-brace/0: recipe run1001
-after-brace/0: add ...
-run/0: instruction run1001/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- add/2 {name: "2", value: 2, type: 0, properties: ["2": "literal"]}, {name: "2", value: 2, type: 0, properties: ["2": "literal"]}
-run/0: ingredient 0 is 2
-run/0: ingredient 1 is 2
-run/0: product 0 is 4
-mem/0: storing 4 in location 1
-run/0: instruction check_trace_negative/1
-run/0: trace-should-not-contain/48 {name: "
-    mem: storing 5 in location 1
-  ", value: 0, type: 0, properties: ["
-    mem: storing 5 in location 1
-  ": "literal-string"]}
diff --git a/cpp/.traces/clear-line-erases-printed-characters b/cpp/.traces/clear-line-erases-printed-characters
deleted file mode 100644
index edf9997d..00000000
--- a/cpp/.traces/clear-line-erases-printed-characters
+++ /dev/null
@@ -1,1170 +0,0 @@
-parse/0: instruction: run
-parse/0:   ingredient: {name: "
-#?     $start-tracing #? 3
-    1:address:screen <- init-fake-screen 3:literal/width, 2:literal/height
-    # print a character
-    1:address:screen <- print-character 1:address:screen, 97:literal  # 'a'
-    # move cursor to start of line
-    1:address:screen <- move-cursor 1:address:screen, 0:literal/row, 0:literal/column
-    # clear line
-    1:address:screen <- clear-line 1:address:screen
-    2:address:array:character <- get 1:address:screen/deref, data:offset
-    3:array:character <- copy 2:address:array:character/deref
-  ", value: 0, type: 0, properties: ["
-#?     $start-tracing #? 3
-    1:address:screen <- init-fake-screen 3:literal/width, 2:literal/height
-    # print a character
-    1:address:screen <- print-character 1:address:screen, 97:literal  # 'a'
-    # move cursor to start of line
-    1:address:screen <- move-cursor 1:address:screen, 0:literal/row, 0:literal/column
-    # clear line
-    1:address:screen <- clear-line 1:address:screen
-    2:address:array:character <- get 1:address:screen/deref, data:offset
-    3:array:character <- copy 2:address:array:character/deref
-  ": "literal-string"]}
-parse/0: instruction: memory-should-contain
-parse/0:   ingredient: {name: "
-    3 <- 6  # width*height
-    4 <- 0
-    5 <- 0
-    6 <- 0
-    7 <- 0
-    8 <- 0
-    9 <- 0
-  ", value: 0, type: 0, properties: ["
-    3 <- 6  # width*height
-    4 <- 0
-    5 <- 0
-    6 <- 0
-    7 <- 0
-    8 <- 0
-    9 <- 0
-  ": "literal-string"]}
-after-brace/0: recipe clear-line-erases-printed-characters
-after-brace/0: run ...
-after-brace/0: memory-should-contain ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: clear-line-erases-printed-characters
-run/0: instruction clear-line-erases-printed-characters/0
-run/0: run/45 {name: "
-#?     $start-tracing #? 3
-    1:address:screen <- init-fake-screen 3:literal/width, 2:literal/height
-    # print a character
-    1:address:screen <- print-character 1:address:screen, 97:literal  # 'a'
-    # move cursor to start of line
-    1:address:screen <- move-cursor 1:address:screen, 0:literal/row, 0:literal/column
-    # clear line
-    1:address:screen <- clear-line 1:address:screen
-    2:address:array:character <- get 1:address:screen/deref, data:offset
-    3:array:character <- copy 2:address:array:character/deref
-  ", value: 0, type: 0, properties: ["
-#?     $start-tracing #? 3
-    1:address:screen <- init-fake-screen 3:literal/width, 2:literal/height
-    # print a character
-    1:address:screen <- print-character 1:address:screen, 97:literal  # 'a'
-    # move cursor to start of line
-    1:address:screen <- move-cursor 1:address:screen, 0:literal/row, 0:literal/column
-    # clear line
-    1:address:screen <- clear-line 1:address:screen
-    2:address:array:character <- get 1:address:screen/deref, data:offset
-    3:array:character <- copy 2:address:array:character/deref
-  ": "literal-string"]}
-parse/0: instruction: init-fake-screen
-parse/0:   ingredient: {name: "3", value: 0, type: 0, properties: ["3": "literal", "width": ]}
-parse/0:   ingredient: {name: "2", value: 0, type: 0, properties: ["2": "literal", "height": ]}
-parse/0:   product: {name: "1", value: 0, type: 2-11, properties: ["1": "address":"screen"]}
-parse/0: instruction: print-character
-parse/0:   ingredient: {name: "1", value: 0, type: 2-11, properties: ["1": "address":"screen"]}
-parse/0:   ingredient: {name: "97", value: 0, type: 0, properties: ["97": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 2-11, properties: ["1": "address":"screen"]}
-parse/0: instruction: move-cursor
-parse/0:   ingredient: {name: "1", value: 0, type: 2-11, properties: ["1": "address":"screen"]}
-parse/0:   ingredient: {name: "0", value: 0, type: 0, properties: ["0": "literal", "row": ]}
-parse/0:   ingredient: {name: "0", value: 0, type: 0, properties: ["0": "literal", "column": ]}
-parse/0:   product: {name: "1", value: 0, type: 2-11, properties: ["1": "address":"screen"]}
-parse/0: instruction: clear-line
-parse/0:   ingredient: {name: "1", value: 0, type: 2-11, properties: ["1": "address":"screen"]}
-parse/0:   product: {name: "1", value: 0, type: 2-11, properties: ["1": "address":"screen"]}
-parse/0: instruction: get
-parse/0:   ingredient: {name: "1", value: 0, type: 2-11, properties: ["1": "address":"screen", "deref": ]}
-parse/0:   ingredient: {name: "data", value: 0, type: 0, properties: ["data": "offset"]}
-parse/0:   product: {name: "2", value: 0, type: 2-5-4, properties: ["2": "address":"array":"character"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "2", value: 0, type: 2-5-4, properties: ["2": "address":"array":"character", "deref": ]}
-parse/0:   product: {name: "3", value: 0, type: 5-4, properties: ["3": "array":"character"]}
-name/0: element data of type screen is at offset 4
-after-brace/0: recipe run1001
-after-brace/0: init-fake-screen ...
-after-brace/0: print-character ...
-after-brace/0: move-cursor ...
-after-brace/0: clear-line ...
-after-brace/0: get ...
-after-brace/0: copy ...
-run/0: instruction run1001/0
-run/0: {name: "1", value: 1, type: 2-11, properties: ["1": "address":"screen"]} <- init-fake-screen/115 {name: "3", value: 3, type: 0, properties: ["3": "literal", "width": ]}, {name: "2", value: 2, type: 0, properties: ["2": "literal", "height": ]}
-run/0: instruction init-fake-screen/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal", "capacity": ]}
-mem/0: array size is 30
-mem/0: new alloc: 1000
-run/0: instruction init-fake-screen/1
-run/0: {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen"]} <- new/44 {name: "screen", value: 11, type: 0, properties: ["screen": "type"]}
-mem/0: new alloc: 1031
-mem/0: storing 1031 in location 1002
-run/0: instruction init-fake-screen/2
-run/0: {name: "width", value: 2, type: 2-1, properties: ["width": "address":"integer"]} <- get-address/25 {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen", "deref": ]}, {name: "num-columns", value: 1, type: 0, properties: ["num-columns": "offset"]}
-run/0: ingredient 0 is result
-mem/0: location 1002 is 1031
-run/0: ingredient 1 is num-columns
-run/0: address to copy is 1032
-run/0: product 0 is 1032
-mem/0: storing 1032 in location 1003
-run/0: instruction init-fake-screen/3
-run/0: {name: "width", value: 2, type: 2-1, properties: ["width": "address":"integer", "deref": ]} <- next-ingredient/30 
-run/0: product 0 is 3
-mem/0: location 1003 is 1032
-mem/0: storing 3 in location 1032
-run/0: instruction init-fake-screen/4
-run/0: {name: "height", value: 3, type: 2-1, properties: ["height": "address":"integer"]} <- get-address/25 {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen", "deref": ]}, {name: "num-rows", value: 0, type: 0, properties: ["num-rows": "offset"]}
-run/0: ingredient 0 is result
-mem/0: location 1002 is 1031
-run/0: ingredient 1 is num-rows
-run/0: address to copy is 1031
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1004
-run/0: instruction init-fake-screen/5
-run/0: {name: "height", value: 3, type: 2-1, properties: ["height": "address":"integer", "deref": ]} <- next-ingredient/30 
-run/0: product 0 is 2
-mem/0: location 1004 is 1031
-mem/0: storing 2 in location 1031
-run/0: instruction init-fake-screen/6
-run/0: {name: "row", value: 4, type: 2-1, properties: ["row": "address":"integer"]} <- get-address/25 {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen", "deref": ]}, {name: "cursor-row", value: 2, type: 0, properties: ["cursor-row": "offset"]}
-run/0: ingredient 0 is result
-mem/0: location 1002 is 1031
-run/0: ingredient 1 is cursor-row
-run/0: address to copy is 1033
-run/0: product 0 is 1033
-mem/0: storing 1033 in location 1005
-run/0: instruction init-fake-screen/7
-run/0: {name: "row", value: 4, type: 2-1, properties: ["row": "address":"integer", "deref": ]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
-mem/0: location 1005 is 1033
-mem/0: storing 0 in location 1033
-run/0: instruction init-fake-screen/8
-run/0: {name: "column", value: 5, type: 2-1, properties: ["column": "address":"integer"]} <- get-address/25 {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen", "deref": ]}, {name: "cursor-column", value: 3, type: 0, properties: ["cursor-column": "offset"]}
-run/0: ingredient 0 is result
-mem/0: location 1002 is 1031
-run/0: ingredient 1 is cursor-column
-run/0: address to copy is 1034
-run/0: product 0 is 1034
-mem/0: storing 1034 in location 1006
-run/0: instruction init-fake-screen/9
-run/0: {name: "column", value: 5, type: 2-1, properties: ["column": "address":"integer", "deref": ]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
-mem/0: location 1006 is 1034
-mem/0: storing 0 in location 1034
-run/0: instruction init-fake-screen/10
-run/0: {name: "bufsize", value: 6, type: 1, properties: ["bufsize": "integer"]} <- multiply/4 {name: "width", value: 2, type: 2-1, properties: ["width": "address":"integer", "deref": ]}, {name: "height", value: 3, type: 2-1, properties: ["height": "address":"integer", "deref": ]}
-run/0: ingredient 0 is width
-mem/0: location 1003 is 1032
-mem/0: location 1032 is 3
-run/0: ingredient 1 is height
-mem/0: location 1004 is 1031
-mem/0: location 1031 is 2
-run/0: ingredient 1 is 2
-run/0: product 0 is 6
-mem/0: storing 6 in location 1007
-run/0: instruction init-fake-screen/11
-run/0: {name: "buf", value: 7, type: 2-2-5-4, properties: ["buf": "address":"address":"array":"character"]} <- get-address/25 {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen", "deref": ]}, {name: "data", value: 4, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is result
-mem/0: location 1002 is 1031
-run/0: ingredient 1 is data
-run/0: address to copy is 1035
-run/0: product 0 is 1035
-mem/0: storing 1035 in location 1008
-run/0: instruction init-fake-screen/12
-run/0: {name: "buf", value: 7, type: 2-2-5-4, properties: ["buf": "address":"address":"array":"character", "deref": ]} <- new/44 {name: "character", value: 0, type: 0, properties: ["character": "literal"]}, {name: "bufsize", value: 6, type: 1, properties: ["bufsize": "integer"]}
-mem/0: location 1007 is 6
-mem/0: array size is 6
-mem/0: new alloc: 1036
-mem/0: location 1008 is 1035
-mem/0: storing 1036 in location 1035
-run/0: instruction init-fake-screen/13
-run/0: clear-screen/116 {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen"]}
-mem/0: location 1002 is 1031
-run/0: instruction clear-screen/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1043
-run/0: instruction clear-screen/1
-run/0: {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]} <- next-ingredient/30 
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1045
-run/0: instruction clear-screen/3
-run/0: break-unless/12 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]}, {name: "", value: 12, type: , properties: ["": ]}
-mem/0: location 1045 is 1031
-run/0: ingredient 0 is 1031
-run/0: jump-unless fell through
-run/0: instruction clear-screen/4
-run/0: {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character"]} <- get/24 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "data", value: 4, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1045 is 1031
-run/0: ingredient 1 is data
-run/0: address to copy is 1035
-run/0: its type is 2
-mem/0: location 1035 is 1036
-run/0: product 0 is 1036
-mem/0: storing 1036 in location 1046
-run/0: instruction clear-screen/5
-run/0: {name: "max", value: 3, type: 1, properties: ["max": "integer"]} <- length/28 {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}
-mem/0: location 1046 is 1036
-mem/0: storing 6 in location 1047
-run/0: instruction clear-screen/6
-run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
-mem/0: storing 0 in location 1048
-run/0: instruction clear-screen/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1048 is 0
-run/0: ingredient 1 is max
-mem/0: location 1047 is 6
-run/0: product 0 is 0
-mem/0: storing 0 in location 1049
-run/0: instruction clear-screen/9
-run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
-mem/0: location 1049 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction clear-screen/10
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address/27 {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is buf
-mem/0: location 1046 is 1036
-run/0: ingredient 1 is {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-mem/0: location 1048 is 0
-run/0: address to copy is 1037
-run/0: product 0 is 1037
-mem/0: storing 1037 in location 1050
-run/0: instruction clear-screen/11
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy/1 {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
-run/0: ingredient 0 is  
-mem/0: location 1050 is 1037
-mem/0: storing 0 in location 1037
-run/0: instruction clear-screen/12
-run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1048 is 0
-run/0: ingredient 1 is 1
-run/0: product 0 is 1
-mem/0: storing 1 in location 1048
-run/0: instruction clear-screen/13
-run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
-run/0: ingredient 0 is -6
-run/0: jumping to instruction 8
-run/0: instruction clear-screen/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1048 is 1
-run/0: ingredient 1 is max
-mem/0: location 1047 is 6
-run/0: product 0 is 0
-mem/0: storing 0 in location 1049
-run/0: instruction clear-screen/9
-run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
-mem/0: location 1049 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction clear-screen/10
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address/27 {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is buf
-mem/0: location 1046 is 1036
-run/0: ingredient 1 is {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-mem/0: location 1048 is 1
-run/0: address to copy is 1038
-run/0: product 0 is 1038
-mem/0: storing 1038 in location 1050
-run/0: instruction clear-screen/11
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy/1 {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
-run/0: ingredient 0 is  
-mem/0: location 1050 is 1038
-mem/0: storing 0 in location 1038
-run/0: instruction clear-screen/12
-run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1048 is 1
-run/0: ingredient 1 is 1
-run/0: product 0 is 2
-mem/0: storing 2 in location 1048
-run/0: instruction clear-screen/13
-run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
-run/0: ingredient 0 is -6
-run/0: jumping to instruction 8
-run/0: instruction clear-screen/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1048 is 2
-run/0: ingredient 1 is max
-mem/0: location 1047 is 6
-run/0: product 0 is 0
-mem/0: storing 0 in location 1049
-run/0: instruction clear-screen/9
-run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
-mem/0: location 1049 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction clear-screen/10
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address/27 {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is buf
-mem/0: location 1046 is 1036
-run/0: ingredient 1 is {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-mem/0: location 1048 is 2
-run/0: address to copy is 1039
-run/0: product 0 is 1039
-mem/0: storing 1039 in location 1050
-run/0: instruction clear-screen/11
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy/1 {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
-run/0: ingredient 0 is  
-mem/0: location 1050 is 1039
-mem/0: storing 0 in location 1039
-run/0: instruction clear-screen/12
-run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1048 is 2
-run/0: ingredient 1 is 1
-run/0: product 0 is 3
-mem/0: storing 3 in location 1048
-run/0: instruction clear-screen/13
-run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
-run/0: ingredient 0 is -6
-run/0: jumping to instruction 8
-run/0: instruction clear-screen/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1048 is 3
-run/0: ingredient 1 is max
-mem/0: location 1047 is 6
-run/0: product 0 is 0
-mem/0: storing 0 in location 1049
-run/0: instruction clear-screen/9
-run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
-mem/0: location 1049 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction clear-screen/10
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address/27 {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is buf
-mem/0: location 1046 is 1036
-run/0: ingredient 1 is {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-mem/0: location 1048 is 3
-run/0: address to copy is 1040
-run/0: product 0 is 1040
-mem/0: storing 1040 in location 1050
-run/0: instruction clear-screen/11
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy/1 {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
-run/0: ingredient 0 is  
-mem/0: location 1050 is 1040
-mem/0: storing 0 in location 1040
-run/0: instruction clear-screen/12
-run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1048 is 3
-run/0: ingredient 1 is 1
-run/0: product 0 is 4
-mem/0: storing 4 in location 1048
-run/0: instruction clear-screen/13
-run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
-run/0: ingredient 0 is -6
-run/0: jumping to instruction 8
-run/0: instruction clear-screen/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1048 is 4
-run/0: ingredient 1 is max
-mem/0: location 1047 is 6
-run/0: product 0 is 0
-mem/0: storing 0 in location 1049
-run/0: instruction clear-screen/9
-run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
-mem/0: location 1049 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction clear-screen/10
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address/27 {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is buf
-mem/0: location 1046 is 1036
-run/0: ingredient 1 is {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-mem/0: location 1048 is 4
-run/0: address to copy is 1041
-run/0: product 0 is 1041
-mem/0: storing 1041 in location 1050
-run/0: instruction clear-screen/11
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy/1 {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
-run/0: ingredient 0 is  
-mem/0: location 1050 is 1041
-mem/0: storing 0 in location 1041
-run/0: instruction clear-screen/12
-run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1048 is 4
-run/0: ingredient 1 is 1
-run/0: product 0 is 5
-mem/0: storing 5 in location 1048
-run/0: instruction clear-screen/13
-run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
-run/0: ingredient 0 is -6
-run/0: jumping to instruction 8
-run/0: instruction clear-screen/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1048 is 5
-run/0: ingredient 1 is max
-mem/0: location 1047 is 6
-run/0: product 0 is 0
-mem/0: storing 0 in location 1049
-run/0: instruction clear-screen/9
-run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
-mem/0: location 1049 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction clear-screen/10
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address/27 {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is buf
-mem/0: location 1046 is 1036
-run/0: ingredient 1 is {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-mem/0: location 1048 is 5
-run/0: address to copy is 1042
-run/0: product 0 is 1042
-mem/0: storing 1042 in location 1050
-run/0: instruction clear-screen/11
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy/1 {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
-run/0: ingredient 0 is  
-mem/0: location 1050 is 1042
-mem/0: storing 0 in location 1042
-run/0: instruction clear-screen/12
-run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1048 is 5
-run/0: ingredient 1 is 1
-run/0: product 0 is 6
-mem/0: storing 6 in location 1048
-run/0: instruction clear-screen/13
-run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
-run/0: ingredient 0 is -6
-run/0: jumping to instruction 8
-run/0: instruction clear-screen/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1048 is 6
-run/0: ingredient 1 is max
-mem/0: location 1047 is 6
-run/0: product 0 is 1
-mem/0: storing 1 in location 1049
-run/0: instruction clear-screen/9
-run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
-mem/0: location 1049 is 1
-run/0: ingredient 0 is 1
-run/0: ingredient 1 is 
-run/0: jumping to instruction 14
-run/0: instruction clear-screen/15
-run/0: reply/33 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "same-as-ingredient": "0"]}
-mem/0: location 1045 is 1031
-run/0: instruction init-fake-screen/14
-run/0: reply/33 {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen"]}
-mem/0: location 1002 is 1031
-run/0: result 0 is 1031
-mem/0: storing 1031 in location 1
-run/0: instruction run1001/1
-run/0: {name: "1", value: 1, type: 2-11, properties: ["1": "address":"screen"]} <- print-character/117 {name: "1", value: 1, type: 2-11, properties: ["1": "address":"screen"]}, {name: "97", value: 97, type: 0, properties: ["97": "literal"]}
-mem/0: location 1 is 1031
-run/0: instruction print-character/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1074
-run/0: instruction print-character/1
-run/0: {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]} <- next-ingredient/30 
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1076
-run/0: instruction print-character/2
-run/0: {name: "c", value: 2, type: 4, properties: ["c": "character"]} <- next-ingredient/30 
-run/0: product 0 is 97
-mem/0: storing 97 in location 1077
-run/0: instruction print-character/4
-run/0: break-unless/12 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]}, {name: "", value: 14, type: , properties: ["": ]}
-mem/0: location 1076 is 1031
-run/0: ingredient 0 is 1031
-run/0: jump-unless fell through
-run/0: instruction print-character/5
-run/0: {name: "row", value: 3, type: 2-1, properties: ["row": "address":"integer"]} <- get-address/25 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "cursor-row", value: 2, type: 0, properties: ["cursor-row": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1076 is 1031
-run/0: ingredient 1 is cursor-row
-run/0: address to copy is 1033
-run/0: product 0 is 1033
-mem/0: storing 1033 in location 1078
-run/0: instruction print-character/6
-run/0: {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer"]} <- get-address/25 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "cursor-column", value: 3, type: 0, properties: ["cursor-column": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1076 is 1031
-run/0: ingredient 1 is cursor-column
-run/0: address to copy is 1034
-run/0: product 0 is 1034
-mem/0: storing 1034 in location 1079
-run/0: instruction print-character/7
-run/0: {name: "width", value: 5, type: 1, properties: ["width": "integer"]} <- get/24 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "num-columns", value: 1, type: 0, properties: ["num-columns": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1076 is 1031
-run/0: ingredient 1 is num-columns
-run/0: address to copy is 1032
-run/0: its type is 1
-mem/0: location 1032 is 3
-run/0: product 0 is 3
-mem/0: storing 3 in location 1080
-run/0: instruction print-character/8
-run/0: {name: "index", value: 6, type: 1, properties: ["index": "integer"]} <- multiply/4 {name: "row", value: 3, type: 2-1, properties: ["row": "address":"integer", "deref": ]}, {name: "width", value: 5, type: 1, properties: ["width": "integer"]}
-run/0: ingredient 0 is row
-mem/0: location 1078 is 1033
-mem/0: location 1033 is 0
-run/0: ingredient 1 is width
-mem/0: location 1080 is 3
-run/0: ingredient 1 is 3
-run/0: product 0 is 0
-mem/0: storing 0 in location 1081
-run/0: instruction print-character/9
-run/0: {name: "index", value: 6, type: 1, properties: ["index": "integer"]} <- add/2 {name: "index", value: 6, type: 1, properties: ["index": "integer"]}, {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]}
-run/0: ingredient 0 is index
-mem/0: location 1081 is 0
-run/0: ingredient 1 is column
-mem/0: location 1079 is 1034
-mem/0: location 1034 is 0
-run/0: product 0 is 0
-mem/0: storing 0 in location 1081
-run/0: instruction print-character/10
-run/0: {name: "buf", value: 7, type: 2-5-4, properties: ["buf": "address":"array":"character"]} <- get/24 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "data", value: 4, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1076 is 1031
-run/0: ingredient 1 is data
-run/0: address to copy is 1035
-run/0: its type is 2
-mem/0: location 1035 is 1036
-run/0: product 0 is 1036
-mem/0: storing 1036 in location 1082
-run/0: instruction print-character/11
-run/0: {name: "cursor", value: 8, type: 2-4, properties: ["cursor": "address":"character"]} <- index-address/27 {name: "buf", value: 7, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "index", value: 6, type: 1, properties: ["index": "integer"]}
-run/0: ingredient 0 is buf
-mem/0: location 1082 is 1036
-run/0: ingredient 1 is {name: "index", value: 6, type: 1, properties: ["index": "integer"]}
-mem/0: location 1081 is 0
-run/0: address to copy is 1037
-run/0: product 0 is 1037
-mem/0: storing 1037 in location 1083
-run/0: instruction print-character/12
-run/0: {name: "cursor", value: 8, type: 2-4, properties: ["cursor": "address":"character", "deref": ]} <- copy/1 {name: "c", value: 2, type: 4, properties: ["c": "character"]}
-run/0: ingredient 0 is c
-mem/0: location 1077 is 97
-mem/0: location 1083 is 1037
-mem/0: storing 97 in location 1037
-run/0: instruction print-character/14
-run/0: {name: "at-right?", value: 9, type: 3, properties: ["at-right?": "boolean"]} <- equal/13 {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]}, {name: "width", value: 5, type: 1, properties: ["width": "integer"]}
-run/0: ingredient 0 is column
-mem/0: location 1079 is 1034
-mem/0: location 1034 is 0
-run/0: ingredient 1 is width
-mem/0: location 1080 is 3
-run/0: product 0 is 0
-mem/0: storing 0 in location 1084
-run/0: instruction print-character/15
-run/0: break-if/11 {name: "at-right?", value: 9, type: 3, properties: ["at-right?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
-mem/0: location 1084 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction print-character/16
-run/0: {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]} <- add/2 {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is column
-mem/0: location 1079 is 1034
-mem/0: location 1034 is 0
-run/0: ingredient 1 is 1
-run/0: product 0 is 1
-mem/0: location 1079 is 1034
-mem/0: storing 1 in location 1034
-run/0: instruction print-character/18
-run/0: reply/33 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "same-as-ingredient": "0"]}
-mem/0: location 1076 is 1031
-run/0: result 0 is 1031
-mem/0: storing 1031 in location 1
-run/0: instruction run1001/2
-run/0: {name: "1", value: 1, type: 2-11, properties: ["1": "address":"screen"]} <- move-cursor/120 {name: "1", value: 1, type: 2-11, properties: ["1": "address":"screen"]}, {name: "0", value: 0, type: 0, properties: ["0": "literal", "row": ]}, {name: "0", value: 0, type: 0, properties: ["0": "literal", "column": ]}
-mem/0: location 1 is 1031
-run/0: instruction move-cursor/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1105
-run/0: instruction move-cursor/1
-run/0: {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]} <- next-ingredient/30 
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1107
-run/0: instruction move-cursor/2
-run/0: {name: "new-row", value: 2, type: 1, properties: ["new-row": "integer"]} <- next-ingredient/30 
-run/0: product 0 is 0
-mem/0: storing 0 in location 1108
-run/0: instruction move-cursor/3
-run/0: {name: "new-column", value: 3, type: 1, properties: ["new-column": "integer"]} <- next-ingredient/30 
-run/0: product 0 is 0
-mem/0: storing 0 in location 1109
-run/0: instruction move-cursor/5
-run/0: break-unless/12 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]}, {name: "", value: 5, type: , properties: ["": ]}
-mem/0: location 1107 is 1031
-run/0: ingredient 0 is 1031
-run/0: jump-unless fell through
-run/0: instruction move-cursor/6
-run/0: {name: "row", value: 4, type: 2-1, properties: ["row": "address":"integer"]} <- get-address/25 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "cursor-row", value: 2, type: 0, properties: ["cursor-row": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1107 is 1031
-run/0: ingredient 1 is cursor-row
-run/0: address to copy is 1033
-run/0: product 0 is 1033
-mem/0: storing 1033 in location 1110
-run/0: instruction move-cursor/7
-run/0: {name: "row", value: 4, type: 2-1, properties: ["row": "address":"integer", "deref": ]} <- copy/1 {name: "new-row", value: 2, type: 1, properties: ["new-row": "integer"]}
-run/0: ingredient 0 is new-row
-mem/0: location 1108 is 0
-mem/0: location 1110 is 1033
-mem/0: storing 0 in location 1033
-run/0: instruction move-cursor/8
-run/0: {name: "column", value: 5, type: 2-1, properties: ["column": "address":"integer"]} <- get-address/25 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "cursor-column", value: 3, type: 0, properties: ["cursor-column": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1107 is 1031
-run/0: ingredient 1 is cursor-column
-run/0: address to copy is 1034
-run/0: product 0 is 1034
-mem/0: storing 1034 in location 1111
-run/0: instruction move-cursor/9
-run/0: {name: "column", value: 5, type: 2-1, properties: ["column": "address":"integer", "deref": ]} <- copy/1 {name: "new-column", value: 3, type: 1, properties: ["new-column": "integer"]}
-run/0: ingredient 0 is new-column
-mem/0: location 1109 is 0
-mem/0: location 1111 is 1034
-mem/0: storing 0 in location 1034
-run/0: instruction move-cursor/10
-run/0: reply/33 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "same-as-ingredient": "0"]}
-mem/0: location 1107 is 1031
-run/0: result 0 is 1031
-mem/0: storing 1031 in location 1
-run/0: instruction run1001/3
-run/0: {name: "1", value: 1, type: 2-11, properties: ["1": "address":"screen"]} <- clear-line/118 {name: "1", value: 1, type: 2-11, properties: ["1": "address":"screen"]}
-mem/0: location 1 is 1031
-run/0: instruction clear-line/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1136
-run/0: instruction clear-line/1
-run/0: {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]} <- next-ingredient/30 
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1138
-run/0: instruction clear-line/3
-run/0: break-unless/12 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]}, {name: "", value: 11, type: , properties: ["": ]}
-mem/0: location 1138 is 1031
-run/0: ingredient 0 is 1031
-run/0: jump-unless fell through
-run/0: instruction clear-line/4
-run/0: {name: "n", value: 2, type: 1, properties: ["n": "integer"]} <- get/24 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "num-columns", value: 1, type: 0, properties: ["num-columns": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1138 is 1031
-run/0: ingredient 1 is num-columns
-run/0: address to copy is 1032
-run/0: its type is 1
-mem/0: location 1032 is 3
-run/0: product 0 is 3
-mem/0: storing 3 in location 1139
-run/0: instruction clear-line/5
-run/0: {name: "column", value: 3, type: 2-1, properties: ["column": "address":"integer"]} <- get-address/25 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "cursor-column", value: 3, type: 0, properties: ["cursor-column": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1138 is 1031
-run/0: ingredient 1 is cursor-column
-run/0: address to copy is 1034
-run/0: product 0 is 1034
-mem/0: storing 1034 in location 1140
-run/0: instruction clear-line/6
-run/0: {name: "original-column", value: 4, type: 1, properties: ["original-column": "integer"]} <- copy/1 {name: "column", value: 3, type: 2-1, properties: ["column": "address":"integer", "deref": ]}
-run/0: ingredient 0 is column
-mem/0: location 1140 is 1034
-mem/0: location 1034 is 0
-mem/0: storing 0 in location 1141
-run/0: instruction clear-line/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "column", value: 3, type: 2-1, properties: ["column": "address":"integer", "deref": ]}, {name: "n", value: 2, type: 1, properties: ["n": "integer"]}
-run/0: ingredient 0 is column
-mem/0: location 1140 is 1034
-mem/0: location 1034 is 0
-run/0: ingredient 1 is n
-mem/0: location 1139 is 3
-run/0: product 0 is 0
-mem/0: storing 0 in location 1142
-run/0: instruction clear-line/9
-run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 2, type: , properties: ["": ]}
-mem/0: location 1142 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction clear-line/10
-run/0: print-character/117 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]}, {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
-mem/0: location 1138 is 1031
-run/0: instruction print-character/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1167
-run/0: instruction print-character/1
-run/0: {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]} <- next-ingredient/30 
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1169
-run/0: instruction print-character/2
-run/0: {name: "c", value: 2, type: 4, properties: ["c": "character"]} <- next-ingredient/30 
-run/0: product 0 is 0
-mem/0: storing 0 in location 1170
-run/0: instruction print-character/4
-run/0: break-unless/12 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]}, {name: "", value: 14, type: , properties: ["": ]}
-mem/0: location 1169 is 1031
-run/0: ingredient 0 is 1031
-run/0: jump-unless fell through
-run/0: instruction print-character/5
-run/0: {name: "row", value: 3, type: 2-1, properties: ["row": "address":"integer"]} <- get-address/25 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "cursor-row", value: 2, type: 0, properties: ["cursor-row": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1169 is 1031
-run/0: ingredient 1 is cursor-row
-run/0: address to copy is 1033
-run/0: product 0 is 1033
-mem/0: storing 1033 in location 1171
-run/0: instruction print-character/6
-run/0: {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer"]} <- get-address/25 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "cursor-column", value: 3, type: 0, properties: ["cursor-column": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1169 is 1031
-run/0: ingredient 1 is cursor-column
-run/0: address to copy is 1034
-run/0: product 0 is 1034
-mem/0: storing 1034 in location 1172
-run/0: instruction print-character/7
-run/0: {name: "width", value: 5, type: 1, properties: ["width": "integer"]} <- get/24 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "num-columns", value: 1, type: 0, properties: ["num-columns": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1169 is 1031
-run/0: ingredient 1 is num-columns
-run/0: address to copy is 1032
-run/0: its type is 1
-mem/0: location 1032 is 3
-run/0: product 0 is 3
-mem/0: storing 3 in location 1173
-run/0: instruction print-character/8
-run/0: {name: "index", value: 6, type: 1, properties: ["index": "integer"]} <- multiply/4 {name: "row", value: 3, type: 2-1, properties: ["row": "address":"integer", "deref": ]}, {name: "width", value: 5, type: 1, properties: ["width": "integer"]}
-run/0: ingredient 0 is row
-mem/0: location 1171 is 1033
-mem/0: location 1033 is 0
-run/0: ingredient 1 is width
-mem/0: location 1173 is 3
-run/0: ingredient 1 is 3
-run/0: product 0 is 0
-mem/0: storing 0 in location 1174
-run/0: instruction print-character/9
-run/0: {name: "index", value: 6, type: 1, properties: ["index": "integer"]} <- add/2 {name: "index", value: 6, type: 1, properties: ["index": "integer"]}, {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]}
-run/0: ingredient 0 is index
-mem/0: location 1174 is 0
-run/0: ingredient 1 is column
-mem/0: location 1172 is 1034
-mem/0: location 1034 is 0
-run/0: product 0 is 0
-mem/0: storing 0 in location 1174
-run/0: instruction print-character/10
-run/0: {name: "buf", value: 7, type: 2-5-4, properties: ["buf": "address":"array":"character"]} <- get/24 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "data", value: 4, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1169 is 1031
-run/0: ingredient 1 is data
-run/0: address to copy is 1035
-run/0: its type is 2
-mem/0: location 1035 is 1036
-run/0: product 0 is 1036
-mem/0: storing 1036 in location 1175
-run/0: instruction print-character/11
-run/0: {name: "cursor", value: 8, type: 2-4, properties: ["cursor": "address":"character"]} <- index-address/27 {name: "buf", value: 7, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "index", value: 6, type: 1, properties: ["index": "integer"]}
-run/0: ingredient 0 is buf
-mem/0: location 1175 is 1036
-run/0: ingredient 1 is {name: "index", value: 6, type: 1, properties: ["index": "integer"]}
-mem/0: location 1174 is 0
-run/0: address to copy is 1037
-run/0: product 0 is 1037
-mem/0: storing 1037 in location 1176
-run/0: instruction print-character/12
-run/0: {name: "cursor", value: 8, type: 2-4, properties: ["cursor": "address":"character", "deref": ]} <- copy/1 {name: "c", value: 2, type: 4, properties: ["c": "character"]}
-run/0: ingredient 0 is c
-mem/0: location 1170 is 0
-mem/0: location 1176 is 1037
-mem/0: storing 0 in location 1037
-run/0: instruction print-character/14
-run/0: {name: "at-right?", value: 9, type: 3, properties: ["at-right?": "boolean"]} <- equal/13 {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]}, {name: "width", value: 5, type: 1, properties: ["width": "integer"]}
-run/0: ingredient 0 is column
-mem/0: location 1172 is 1034
-mem/0: location 1034 is 0
-run/0: ingredient 1 is width
-mem/0: location 1173 is 3
-run/0: product 0 is 0
-mem/0: storing 0 in location 1177
-run/0: instruction print-character/15
-run/0: break-if/11 {name: "at-right?", value: 9, type: 3, properties: ["at-right?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
-mem/0: location 1177 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction print-character/16
-run/0: {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]} <- add/2 {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is column
-mem/0: location 1172 is 1034
-mem/0: location 1034 is 0
-run/0: ingredient 1 is 1
-run/0: product 0 is 1
-mem/0: location 1172 is 1034
-mem/0: storing 1 in location 1034
-run/0: instruction print-character/18
-run/0: reply/33 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "same-as-ingredient": "0"]}
-mem/0: location 1169 is 1031
-run/0: instruction clear-line/11
-run/0: loop/10 {name: "", value: -4, type: , properties: ["": ]}
-run/0: ingredient 0 is -4
-run/0: jumping to instruction 8
-run/0: instruction clear-line/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "column", value: 3, type: 2-1, properties: ["column": "address":"integer", "deref": ]}, {name: "n", value: 2, type: 1, properties: ["n": "integer"]}
-run/0: ingredient 0 is column
-mem/0: location 1140 is 1034
-mem/0: location 1034 is 1
-run/0: ingredient 1 is n
-mem/0: location 1139 is 3
-run/0: product 0 is 0
-mem/0: storing 0 in location 1142
-run/0: instruction clear-line/9
-run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 2, type: , properties: ["": ]}
-mem/0: location 1142 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction clear-line/10
-run/0: print-character/117 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]}, {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
-mem/0: location 1138 is 1031
-run/0: instruction print-character/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1198
-run/0: instruction print-character/1
-run/0: {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]} <- next-ingredient/30 
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1200
-run/0: instruction print-character/2
-run/0: {name: "c", value: 2, type: 4, properties: ["c": "character"]} <- next-ingredient/30 
-run/0: product 0 is 0
-mem/0: storing 0 in location 1201
-run/0: instruction print-character/4
-run/0: break-unless/12 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]}, {name: "", value: 14, type: , properties: ["": ]}
-mem/0: location 1200 is 1031
-run/0: ingredient 0 is 1031
-run/0: jump-unless fell through
-run/0: instruction print-character/5
-run/0: {name: "row", value: 3, type: 2-1, properties: ["row": "address":"integer"]} <- get-address/25 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "cursor-row", value: 2, type: 0, properties: ["cursor-row": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1200 is 1031
-run/0: ingredient 1 is cursor-row
-run/0: address to copy is 1033
-run/0: product 0 is 1033
-mem/0: storing 1033 in location 1202
-run/0: instruction print-character/6
-run/0: {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer"]} <- get-address/25 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "cursor-column", value: 3, type: 0, properties: ["cursor-column": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1200 is 1031
-run/0: ingredient 1 is cursor-column
-run/0: address to copy is 1034
-run/0: product 0 is 1034
-mem/0: storing 1034 in location 1203
-run/0: instruction print-character/7
-run/0: {name: "width", value: 5, type: 1, properties: ["width": "integer"]} <- get/24 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "num-columns", value: 1, type: 0, properties: ["num-columns": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1200 is 1031
-run/0: ingredient 1 is num-columns
-run/0: address to copy is 1032
-run/0: its type is 1
-mem/0: location 1032 is 3
-run/0: product 0 is 3
-mem/0: storing 3 in location 1204
-run/0: instruction print-character/8
-run/0: {name: "index", value: 6, type: 1, properties: ["index": "integer"]} <- multiply/4 {name: "row", value: 3, type: 2-1, properties: ["row": "address":"integer", "deref": ]}, {name: "width", value: 5, type: 1, properties: ["width": "integer"]}
-run/0: ingredient 0 is row
-mem/0: location 1202 is 1033
-mem/0: location 1033 is 0
-run/0: ingredient 1 is width
-mem/0: location 1204 is 3
-run/0: ingredient 1 is 3
-run/0: product 0 is 0
-mem/0: storing 0 in location 1205
-run/0: instruction print-character/9
-run/0: {name: "index", value: 6, type: 1, properties: ["index": "integer"]} <- add/2 {name: "index", value: 6, type: 1, properties: ["index": "integer"]}, {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]}
-run/0: ingredient 0 is index
-mem/0: location 1205 is 0
-run/0: ingredient 1 is column
-mem/0: location 1203 is 1034
-mem/0: location 1034 is 1
-run/0: product 0 is 1
-mem/0: storing 1 in location 1205
-run/0: instruction print-character/10
-run/0: {name: "buf", value: 7, type: 2-5-4, properties: ["buf": "address":"array":"character"]} <- get/24 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "data", value: 4, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1200 is 1031
-run/0: ingredient 1 is data
-run/0: address to copy is 1035
-run/0: its type is 2
-mem/0: location 1035 is 1036
-run/0: product 0 is 1036
-mem/0: storing 1036 in location 1206
-run/0: instruction print-character/11
-run/0: {name: "cursor", value: 8, type: 2-4, properties: ["cursor": "address":"character"]} <- index-address/27 {name: "buf", value: 7, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "index", value: 6, type: 1, properties: ["index": "integer"]}
-run/0: ingredient 0 is buf
-mem/0: location 1206 is 1036
-run/0: ingredient 1 is {name: "index", value: 6, type: 1, properties: ["index": "integer"]}
-mem/0: location 1205 is 1
-run/0: address to copy is 1038
-run/0: product 0 is 1038
-mem/0: storing 1038 in location 1207
-run/0: instruction print-character/12
-run/0: {name: "cursor", value: 8, type: 2-4, properties: ["cursor": "address":"character", "deref": ]} <- copy/1 {name: "c", value: 2, type: 4, properties: ["c": "character"]}
-run/0: ingredient 0 is c
-mem/0: location 1201 is 0
-mem/0: location 1207 is 1038
-mem/0: storing 0 in location 1038
-run/0: instruction print-character/14
-run/0: {name: "at-right?", value: 9, type: 3, properties: ["at-right?": "boolean"]} <- equal/13 {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]}, {name: "width", value: 5, type: 1, properties: ["width": "integer"]}
-run/0: ingredient 0 is column
-mem/0: location 1203 is 1034
-mem/0: location 1034 is 1
-run/0: ingredient 1 is width
-mem/0: location 1204 is 3
-run/0: product 0 is 0
-mem/0: storing 0 in location 1208
-run/0: instruction print-character/15
-run/0: break-if/11 {name: "at-right?", value: 9, type: 3, properties: ["at-right?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
-mem/0: location 1208 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction print-character/16
-run/0: {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]} <- add/2 {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is column
-mem/0: location 1203 is 1034
-mem/0: location 1034 is 1
-run/0: ingredient 1 is 1
-run/0: product 0 is 2
-mem/0: location 1203 is 1034
-mem/0: storing 2 in location 1034
-run/0: instruction print-character/18
-run/0: reply/33 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "same-as-ingredient": "0"]}
-mem/0: location 1200 is 1031
-run/0: instruction clear-line/11
-run/0: loop/10 {name: "", value: -4, type: , properties: ["": ]}
-run/0: ingredient 0 is -4
-run/0: jumping to instruction 8
-run/0: instruction clear-line/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "column", value: 3, type: 2-1, properties: ["column": "address":"integer", "deref": ]}, {name: "n", value: 2, type: 1, properties: ["n": "integer"]}
-run/0: ingredient 0 is column
-mem/0: location 1140 is 1034
-mem/0: location 1034 is 2
-run/0: ingredient 1 is n
-mem/0: location 1139 is 3
-run/0: product 0 is 0
-mem/0: storing 0 in location 1142
-run/0: instruction clear-line/9
-run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 2, type: , properties: ["": ]}
-mem/0: location 1142 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction clear-line/10
-run/0: print-character/117 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]}, {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
-mem/0: location 1138 is 1031
-run/0: instruction print-character/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1229
-run/0: instruction print-character/1
-run/0: {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]} <- next-ingredient/30 
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1231
-run/0: instruction print-character/2
-run/0: {name: "c", value: 2, type: 4, properties: ["c": "character"]} <- next-ingredient/30 
-run/0: product 0 is 0
-mem/0: storing 0 in location 1232
-run/0: instruction print-character/4
-run/0: break-unless/12 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]}, {name: "", value: 14, type: , properties: ["": ]}
-mem/0: location 1231 is 1031
-run/0: ingredient 0 is 1031
-run/0: jump-unless fell through
-run/0: instruction print-character/5
-run/0: {name: "row", value: 3, type: 2-1, properties: ["row": "address":"integer"]} <- get-address/25 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "cursor-row", value: 2, type: 0, properties: ["cursor-row": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1231 is 1031
-run/0: ingredient 1 is cursor-row
-run/0: address to copy is 1033
-run/0: product 0 is 1033
-mem/0: storing 1033 in location 1233
-run/0: instruction print-character/6
-run/0: {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer"]} <- get-address/25 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "cursor-column", value: 3, type: 0, properties: ["cursor-column": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1231 is 1031
-run/0: ingredient 1 is cursor-column
-run/0: address to copy is 1034
-run/0: product 0 is 1034
-mem/0: storing 1034 in location 1234
-run/0: instruction print-character/7
-run/0: {name: "width", value: 5, type: 1, properties: ["width": "integer"]} <- get/24 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "num-columns", value: 1, type: 0, properties: ["num-columns": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1231 is 1031
-run/0: ingredient 1 is num-columns
-run/0: address to copy is 1032
-run/0: its type is 1
-mem/0: location 1032 is 3
-run/0: product 0 is 3
-mem/0: storing 3 in location 1235
-run/0: instruction print-character/8
-run/0: {name: "index", value: 6, type: 1, properties: ["index": "integer"]} <- multiply/4 {name: "row", value: 3, type: 2-1, properties: ["row": "address":"integer", "deref": ]}, {name: "width", value: 5, type: 1, properties: ["width": "integer"]}
-run/0: ingredient 0 is row
-mem/0: location 1233 is 1033
-mem/0: location 1033 is 0
-run/0: ingredient 1 is width
-mem/0: location 1235 is 3
-run/0: ingredient 1 is 3
-run/0: product 0 is 0
-mem/0: storing 0 in location 1236
-run/0: instruction print-character/9
-run/0: {name: "index", value: 6, type: 1, properties: ["index": "integer"]} <- add/2 {name: "index", value: 6, type: 1, properties: ["index": "integer"]}, {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]}
-run/0: ingredient 0 is index
-mem/0: location 1236 is 0
-run/0: ingredient 1 is column
-mem/0: location 1234 is 1034
-mem/0: location 1034 is 2
-run/0: product 0 is 2
-mem/0: storing 2 in location 1236
-run/0: instruction print-character/10
-run/0: {name: "buf", value: 7, type: 2-5-4, properties: ["buf": "address":"array":"character"]} <- get/24 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "data", value: 4, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1231 is 1031
-run/0: ingredient 1 is data
-run/0: address to copy is 1035
-run/0: its type is 2
-mem/0: location 1035 is 1036
-run/0: product 0 is 1036
-mem/0: storing 1036 in location 1237
-run/0: instruction print-character/11
-run/0: {name: "cursor", value: 8, type: 2-4, properties: ["cursor": "address":"character"]} <- index-address/27 {name: "buf", value: 7, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "index", value: 6, type: 1, properties: ["index": "integer"]}
-run/0: ingredient 0 is buf
-mem/0: location 1237 is 1036
-run/0: ingredient 1 is {name: "index", value: 6, type: 1, properties: ["index": "integer"]}
-mem/0: location 1236 is 2
-run/0: address to copy is 1039
-run/0: product 0 is 1039
-mem/0: storing 1039 in location 1238
-run/0: instruction print-character/12
-run/0: {name: "cursor", value: 8, type: 2-4, properties: ["cursor": "address":"character", "deref": ]} <- copy/1 {name: "c", value: 2, type: 4, properties: ["c": "character"]}
-run/0: ingredient 0 is c
-mem/0: location 1232 is 0
-mem/0: location 1238 is 1039
-mem/0: storing 0 in location 1039
-run/0: instruction print-character/14
-run/0: {name: "at-right?", value: 9, type: 3, properties: ["at-right?": "boolean"]} <- equal/13 {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]}, {name: "width", value: 5, type: 1, properties: ["width": "integer"]}
-run/0: ingredient 0 is column
-mem/0: location 1234 is 1034
-mem/0: location 1034 is 2
-run/0: ingredient 1 is width
-mem/0: location 1235 is 3
-run/0: product 0 is 0
-mem/0: storing 0 in location 1239
-run/0: instruction print-character/15
-run/0: break-if/11 {name: "at-right?", value: 9, type: 3, properties: ["at-right?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
-mem/0: location 1239 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction print-character/16
-run/0: {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]} <- add/2 {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is column
-mem/0: location 1234 is 1034
-mem/0: location 1034 is 2
-run/0: ingredient 1 is 1
-run/0: product 0 is 3
-mem/0: location 1234 is 1034
-mem/0: storing 3 in location 1034
-run/0: instruction print-character/18
-run/0: reply/33 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "same-as-ingredient": "0"]}
-mem/0: location 1231 is 1031
-run/0: instruction clear-line/11
-run/0: loop/10 {name: "", value: -4, type: , properties: ["": ]}
-run/0: ingredient 0 is -4
-run/0: jumping to instruction 8
-run/0: instruction clear-line/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "column", value: 3, type: 2-1, properties: ["column": "address":"integer", "deref": ]}, {name: "n", value: 2, type: 1, properties: ["n": "integer"]}
-run/0: ingredient 0 is column
-mem/0: location 1140 is 1034
-mem/0: location 1034 is 3
-run/0: ingredient 1 is n
-mem/0: location 1139 is 3
-run/0: product 0 is 1
-mem/0: storing 1 in location 1142
-run/0: instruction clear-line/9
-run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 2, type: , properties: ["": ]}
-mem/0: location 1142 is 1
-run/0: ingredient 0 is 1
-run/0: ingredient 1 is 
-run/0: jumping to instruction 12
-run/0: instruction clear-line/13
-run/0: {name: "column", value: 3, type: 2-1, properties: ["column": "address":"integer", "deref": ]} <- copy/1 {name: "original-column", value: 4, type: 1, properties: ["original-column": "integer"]}
-run/0: ingredient 0 is original-column
-mem/0: location 1141 is 0
-mem/0: location 1140 is 1034
-mem/0: storing 0 in location 1034
-run/0: instruction clear-line/14
-run/0: reply/33 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "same-as-ingredient": "0"]}
-mem/0: location 1138 is 1031
-run/0: result 0 is 1031
-mem/0: storing 1031 in location 1
-run/0: instruction run1001/4
-run/0: {name: "2", value: 2, type: 2-5-4, properties: ["2": "address":"array":"character"]} <- get/24 {name: "1", value: 1, type: 2-11, properties: ["1": "address":"screen", "deref": ]}, {name: "data", value: 4, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is 1
-mem/0: location 1 is 1031
-run/0: ingredient 1 is data
-run/0: address to copy is 1035
-run/0: its type is 2
-mem/0: location 1035 is 1036
-run/0: product 0 is 1036
-mem/0: storing 1036 in location 2
-run/0: instruction run1001/5
-run/0: {name: "3", value: 3, type: 5-4, properties: ["3": "array":"character"]} <- copy/1 {name: "2", value: 2, type: 2-5-4, properties: ["2": "address":"array":"character", "deref": ]}
-run/0: ingredient 0 is 2
-mem/0: location 2 is 1036
-mem/0: location 1036 is 6
-mem/0: location 1037 is 0
-mem/0: location 1038 is 0
-mem/0: location 1039 is 0
-mem/0: location 1040 is 0
-mem/0: location 1041 is 0
-mem/0: location 1042 is 0
-mem/0: storing 6 in location 3
-mem/0: storing 0 in location 4
-mem/0: storing 0 in location 5
-mem/0: storing 0 in location 6
-mem/0: storing 0 in location 7
-mem/0: storing 0 in location 8
-mem/0: storing 0 in location 9
-run/0: instruction clear-line-erases-printed-characters/1
-run/0: memory-should-contain/46 {name: "
-    3 <- 6  # width*height
-    4 <- 0
-    5 <- 0
-    6 <- 0
-    7 <- 0
-    8 <- 0
-    9 <- 0
-  ", value: 0, type: 0, properties: ["
-    3 <- 6  # width*height
-    4 <- 0
-    5 <- 0
-    6 <- 0
-    7 <- 0
-    8 <- 0
-    9 <- 0
-  ": "literal-string"]}
-run/0: checking location 3
-run/0: checking location 4
-run/0: checking location 5
-run/0: checking location 6
-run/0: checking location 7
-run/0: checking location 8
-run/0: checking location 9
diff --git a/cpp/.traces/clear-line-erases-printed-characters2 b/cpp/.traces/clear-line-erases-printed-characters2
deleted file mode 100644
index 20ffbd1c..00000000
--- a/cpp/.traces/clear-line-erases-printed-characters2
+++ /dev/null
@@ -1,1718 +0,0 @@
-parse/0: instruction: assume-screen
-parse/0:   ingredient: {name: "5", value: 0, type: 0, properties: ["5": "literal", "width": ]}
-parse/0:   ingredient: {name: "3", value: 0, type: 0, properties: ["3": "literal", "height": ]}
-parse/0: instruction: run
-parse/0:   ingredient: {name: "
-    # print a character
-    screen:address <- print-character screen:address, 97:literal  # 'a'
-    # move cursor to start of line
-    screen:address <- move-cursor screen:address, 0:literal/row, 0:literal/column
-    # clear line
-    screen:address <- clear-line screen:address
-  ", value: 0, type: 0, properties: ["
-    # print a character
-    screen:address <- print-character screen:address, 97:literal  # 'a'
-    # move cursor to start of line
-    screen:address <- move-cursor screen:address, 0:literal/row, 0:literal/column
-    # clear line
-    screen:address <- clear-line screen:address
-  ": "literal-string"]}
-parse/0: instruction: screen-should-contain
-parse/0:   ingredient: {name: "
-    .     .
-    .     .
-    .     .
-  ", value: 0, type: 0, properties: ["
-    .     .
-    .     .
-    .     .
-  ": "literal-string"]}
-after-brace/0: recipe clear-line-erases-printed-characters2
-after-brace/0: assume-screen ...
-after-brace/0: run ...
-after-brace/0: screen-should-contain ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: clear-line-erases-printed-characters2
-run/0: instruction clear-line-erases-printed-characters2/0
-run/0: {name: "screen", value: 900, type: 2, properties: ["screen": "address"]} <- assume-screen/115 {name: "5", value: 5, type: 0, properties: ["5": "literal", "width": ]}, {name: "3", value: 3, type: 0, properties: ["3": "literal", "height": ]}
-run/0: instruction init-fake-screen/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal", "capacity": ]}
-mem/0: array size is 30
-mem/0: new alloc: 1000
-run/0: instruction init-fake-screen/1
-run/0: {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen"]} <- new/44 {name: "screen", value: 11, type: 0, properties: ["screen": "type"]}
-mem/0: new alloc: 1031
-mem/0: storing 1031 in location 1002
-run/0: instruction init-fake-screen/2
-run/0: {name: "width", value: 2, type: 2-1, properties: ["width": "address":"integer"]} <- get-address/25 {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen", "deref": ]}, {name: "num-columns", value: 1, type: 0, properties: ["num-columns": "offset"]}
-run/0: ingredient 0 is result
-mem/0: location 1002 is 1031
-run/0: ingredient 1 is num-columns
-run/0: address to copy is 1032
-run/0: product 0 is 1032
-mem/0: storing 1032 in location 1003
-run/0: instruction init-fake-screen/3
-run/0: {name: "width", value: 2, type: 2-1, properties: ["width": "address":"integer", "deref": ]} <- next-ingredient/30 
-run/0: product 0 is 5
-mem/0: location 1003 is 1032
-mem/0: storing 5 in location 1032
-run/0: instruction init-fake-screen/4
-run/0: {name: "height", value: 3, type: 2-1, properties: ["height": "address":"integer"]} <- get-address/25 {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen", "deref": ]}, {name: "num-rows", value: 0, type: 0, properties: ["num-rows": "offset"]}
-run/0: ingredient 0 is result
-mem/0: location 1002 is 1031
-run/0: ingredient 1 is num-rows
-run/0: address to copy is 1031
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1004
-run/0: instruction init-fake-screen/5
-run/0: {name: "height", value: 3, type: 2-1, properties: ["height": "address":"integer", "deref": ]} <- next-ingredient/30 
-run/0: product 0 is 3
-mem/0: location 1004 is 1031
-mem/0: storing 3 in location 1031
-run/0: instruction init-fake-screen/6
-run/0: {name: "row", value: 4, type: 2-1, properties: ["row": "address":"integer"]} <- get-address/25 {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen", "deref": ]}, {name: "cursor-row", value: 2, type: 0, properties: ["cursor-row": "offset"]}
-run/0: ingredient 0 is result
-mem/0: location 1002 is 1031
-run/0: ingredient 1 is cursor-row
-run/0: address to copy is 1033
-run/0: product 0 is 1033
-mem/0: storing 1033 in location 1005
-run/0: instruction init-fake-screen/7
-run/0: {name: "row", value: 4, type: 2-1, properties: ["row": "address":"integer", "deref": ]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
-mem/0: location 1005 is 1033
-mem/0: storing 0 in location 1033
-run/0: instruction init-fake-screen/8
-run/0: {name: "column", value: 5, type: 2-1, properties: ["column": "address":"integer"]} <- get-address/25 {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen", "deref": ]}, {name: "cursor-column", value: 3, type: 0, properties: ["cursor-column": "offset"]}
-run/0: ingredient 0 is result
-mem/0: location 1002 is 1031
-run/0: ingredient 1 is cursor-column
-run/0: address to copy is 1034
-run/0: product 0 is 1034
-mem/0: storing 1034 in location 1006
-run/0: instruction init-fake-screen/9
-run/0: {name: "column", value: 5, type: 2-1, properties: ["column": "address":"integer", "deref": ]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
-mem/0: location 1006 is 1034
-mem/0: storing 0 in location 1034
-run/0: instruction init-fake-screen/10
-run/0: {name: "bufsize", value: 6, type: 1, properties: ["bufsize": "integer"]} <- multiply/4 {name: "width", value: 2, type: 2-1, properties: ["width": "address":"integer", "deref": ]}, {name: "height", value: 3, type: 2-1, properties: ["height": "address":"integer", "deref": ]}
-run/0: ingredient 0 is width
-mem/0: location 1003 is 1032
-mem/0: location 1032 is 5
-run/0: ingredient 1 is height
-mem/0: location 1004 is 1031
-mem/0: location 1031 is 3
-run/0: ingredient 1 is 3
-run/0: product 0 is 15
-mem/0: storing 15 in location 1007
-run/0: instruction init-fake-screen/11
-run/0: {name: "buf", value: 7, type: 2-2-5-4, properties: ["buf": "address":"address":"array":"character"]} <- get-address/25 {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen", "deref": ]}, {name: "data", value: 4, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is result
-mem/0: location 1002 is 1031
-run/0: ingredient 1 is data
-run/0: address to copy is 1035
-run/0: product 0 is 1035
-mem/0: storing 1035 in location 1008
-run/0: instruction init-fake-screen/12
-run/0: {name: "buf", value: 7, type: 2-2-5-4, properties: ["buf": "address":"address":"array":"character", "deref": ]} <- new/44 {name: "character", value: 0, type: 0, properties: ["character": "literal"]}, {name: "bufsize", value: 6, type: 1, properties: ["bufsize": "integer"]}
-mem/0: location 1007 is 15
-mem/0: array size is 15
-mem/0: new alloc: 1036
-mem/0: location 1008 is 1035
-mem/0: storing 1036 in location 1035
-run/0: instruction init-fake-screen/13
-run/0: clear-screen/116 {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen"]}
-mem/0: location 1002 is 1031
-run/0: instruction clear-screen/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1052
-run/0: instruction clear-screen/1
-run/0: {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]} <- next-ingredient/30 
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1054
-run/0: instruction clear-screen/3
-run/0: break-unless/12 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]}, {name: "", value: 12, type: , properties: ["": ]}
-mem/0: location 1054 is 1031
-run/0: ingredient 0 is 1031
-run/0: jump-unless fell through
-run/0: instruction clear-screen/4
-run/0: {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character"]} <- get/24 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "data", value: 4, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1054 is 1031
-run/0: ingredient 1 is data
-run/0: address to copy is 1035
-run/0: its type is 2
-mem/0: location 1035 is 1036
-run/0: product 0 is 1036
-mem/0: storing 1036 in location 1055
-run/0: instruction clear-screen/5
-run/0: {name: "max", value: 3, type: 1, properties: ["max": "integer"]} <- length/28 {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}
-mem/0: location 1055 is 1036
-mem/0: storing 15 in location 1056
-run/0: instruction clear-screen/6
-run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
-mem/0: storing 0 in location 1057
-run/0: instruction clear-screen/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 0
-run/0: ingredient 1 is max
-mem/0: location 1056 is 15
-run/0: product 0 is 0
-mem/0: storing 0 in location 1058
-run/0: instruction clear-screen/9
-run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
-mem/0: location 1058 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction clear-screen/10
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address/27 {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is buf
-mem/0: location 1055 is 1036
-run/0: ingredient 1 is {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-mem/0: location 1057 is 0
-run/0: address to copy is 1037
-run/0: product 0 is 1037
-mem/0: storing 1037 in location 1059
-run/0: instruction clear-screen/11
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy/1 {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
-run/0: ingredient 0 is  
-mem/0: location 1059 is 1037
-mem/0: storing 0 in location 1037
-run/0: instruction clear-screen/12
-run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 0
-run/0: ingredient 1 is 1
-run/0: product 0 is 1
-mem/0: storing 1 in location 1057
-run/0: instruction clear-screen/13
-run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
-run/0: ingredient 0 is -6
-run/0: jumping to instruction 8
-run/0: instruction clear-screen/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 1
-run/0: ingredient 1 is max
-mem/0: location 1056 is 15
-run/0: product 0 is 0
-mem/0: storing 0 in location 1058
-run/0: instruction clear-screen/9
-run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
-mem/0: location 1058 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction clear-screen/10
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address/27 {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is buf
-mem/0: location 1055 is 1036
-run/0: ingredient 1 is {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-mem/0: location 1057 is 1
-run/0: address to copy is 1038
-run/0: product 0 is 1038
-mem/0: storing 1038 in location 1059
-run/0: instruction clear-screen/11
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy/1 {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
-run/0: ingredient 0 is  
-mem/0: location 1059 is 1038
-mem/0: storing 0 in location 1038
-run/0: instruction clear-screen/12
-run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 1
-run/0: ingredient 1 is 1
-run/0: product 0 is 2
-mem/0: storing 2 in location 1057
-run/0: instruction clear-screen/13
-run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
-run/0: ingredient 0 is -6
-run/0: jumping to instruction 8
-run/0: instruction clear-screen/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 2
-run/0: ingredient 1 is max
-mem/0: location 1056 is 15
-run/0: product 0 is 0
-mem/0: storing 0 in location 1058
-run/0: instruction clear-screen/9
-run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
-mem/0: location 1058 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction clear-screen/10
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address/27 {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is buf
-mem/0: location 1055 is 1036
-run/0: ingredient 1 is {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-mem/0: location 1057 is 2
-run/0: address to copy is 1039
-run/0: product 0 is 1039
-mem/0: storing 1039 in location 1059
-run/0: instruction clear-screen/11
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy/1 {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
-run/0: ingredient 0 is  
-mem/0: location 1059 is 1039
-mem/0: storing 0 in location 1039
-run/0: instruction clear-screen/12
-run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 2
-run/0: ingredient 1 is 1
-run/0: product 0 is 3
-mem/0: storing 3 in location 1057
-run/0: instruction clear-screen/13
-run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
-run/0: ingredient 0 is -6
-run/0: jumping to instruction 8
-run/0: instruction clear-screen/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 3
-run/0: ingredient 1 is max
-mem/0: location 1056 is 15
-run/0: product 0 is 0
-mem/0: storing 0 in location 1058
-run/0: instruction clear-screen/9
-run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
-mem/0: location 1058 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction clear-screen/10
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address/27 {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is buf
-mem/0: location 1055 is 1036
-run/0: ingredient 1 is {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-mem/0: location 1057 is 3
-run/0: address to copy is 1040
-run/0: product 0 is 1040
-mem/0: storing 1040 in location 1059
-run/0: instruction clear-screen/11
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy/1 {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
-run/0: ingredient 0 is  
-mem/0: location 1059 is 1040
-mem/0: storing 0 in location 1040
-run/0: instruction clear-screen/12
-run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 3
-run/0: ingredient 1 is 1
-run/0: product 0 is 4
-mem/0: storing 4 in location 1057
-run/0: instruction clear-screen/13
-run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
-run/0: ingredient 0 is -6
-run/0: jumping to instruction 8
-run/0: instruction clear-screen/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 4
-run/0: ingredient 1 is max
-mem/0: location 1056 is 15
-run/0: product 0 is 0
-mem/0: storing 0 in location 1058
-run/0: instruction clear-screen/9
-run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
-mem/0: location 1058 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction clear-screen/10
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address/27 {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is buf
-mem/0: location 1055 is 1036
-run/0: ingredient 1 is {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-mem/0: location 1057 is 4
-run/0: address to copy is 1041
-run/0: product 0 is 1041
-mem/0: storing 1041 in location 1059
-run/0: instruction clear-screen/11
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy/1 {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
-run/0: ingredient 0 is  
-mem/0: location 1059 is 1041
-mem/0: storing 0 in location 1041
-run/0: instruction clear-screen/12
-run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 4
-run/0: ingredient 1 is 1
-run/0: product 0 is 5
-mem/0: storing 5 in location 1057
-run/0: instruction clear-screen/13
-run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
-run/0: ingredient 0 is -6
-run/0: jumping to instruction 8
-run/0: instruction clear-screen/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 5
-run/0: ingredient 1 is max
-mem/0: location 1056 is 15
-run/0: product 0 is 0
-mem/0: storing 0 in location 1058
-run/0: instruction clear-screen/9
-run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
-mem/0: location 1058 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction clear-screen/10
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address/27 {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is buf
-mem/0: location 1055 is 1036
-run/0: ingredient 1 is {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-mem/0: location 1057 is 5
-run/0: address to copy is 1042
-run/0: product 0 is 1042
-mem/0: storing 1042 in location 1059
-run/0: instruction clear-screen/11
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy/1 {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
-run/0: ingredient 0 is  
-mem/0: location 1059 is 1042
-mem/0: storing 0 in location 1042
-run/0: instruction clear-screen/12
-run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 5
-run/0: ingredient 1 is 1
-run/0: product 0 is 6
-mem/0: storing 6 in location 1057
-run/0: instruction clear-screen/13
-run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
-run/0: ingredient 0 is -6
-run/0: jumping to instruction 8
-run/0: instruction clear-screen/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 6
-run/0: ingredient 1 is max
-mem/0: location 1056 is 15
-run/0: product 0 is 0
-mem/0: storing 0 in location 1058
-run/0: instruction clear-screen/9
-run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
-mem/0: location 1058 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction clear-screen/10
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address/27 {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is buf
-mem/0: location 1055 is 1036
-run/0: ingredient 1 is {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-mem/0: location 1057 is 6
-run/0: address to copy is 1043
-run/0: product 0 is 1043
-mem/0: storing 1043 in location 1059
-run/0: instruction clear-screen/11
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy/1 {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
-run/0: ingredient 0 is  
-mem/0: location 1059 is 1043
-mem/0: storing 0 in location 1043
-run/0: instruction clear-screen/12
-run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 6
-run/0: ingredient 1 is 1
-run/0: product 0 is 7
-mem/0: storing 7 in location 1057
-run/0: instruction clear-screen/13
-run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
-run/0: ingredient 0 is -6
-run/0: jumping to instruction 8
-run/0: instruction clear-screen/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 7
-run/0: ingredient 1 is max
-mem/0: location 1056 is 15
-run/0: product 0 is 0
-mem/0: storing 0 in location 1058
-run/0: instruction clear-screen/9
-run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
-mem/0: location 1058 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction clear-screen/10
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address/27 {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is buf
-mem/0: location 1055 is 1036
-run/0: ingredient 1 is {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-mem/0: location 1057 is 7
-run/0: address to copy is 1044
-run/0: product 0 is 1044
-mem/0: storing 1044 in location 1059
-run/0: instruction clear-screen/11
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy/1 {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
-run/0: ingredient 0 is  
-mem/0: location 1059 is 1044
-mem/0: storing 0 in location 1044
-run/0: instruction clear-screen/12
-run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 7
-run/0: ingredient 1 is 1
-run/0: product 0 is 8
-mem/0: storing 8 in location 1057
-run/0: instruction clear-screen/13
-run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
-run/0: ingredient 0 is -6
-run/0: jumping to instruction 8
-run/0: instruction clear-screen/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 8
-run/0: ingredient 1 is max
-mem/0: location 1056 is 15
-run/0: product 0 is 0
-mem/0: storing 0 in location 1058
-run/0: instruction clear-screen/9
-run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
-mem/0: location 1058 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction clear-screen/10
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address/27 {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is buf
-mem/0: location 1055 is 1036
-run/0: ingredient 1 is {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-mem/0: location 1057 is 8
-run/0: address to copy is 1045
-run/0: product 0 is 1045
-mem/0: storing 1045 in location 1059
-run/0: instruction clear-screen/11
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy/1 {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
-run/0: ingredient 0 is  
-mem/0: location 1059 is 1045
-mem/0: storing 0 in location 1045
-run/0: instruction clear-screen/12
-run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 8
-run/0: ingredient 1 is 1
-run/0: product 0 is 9
-mem/0: storing 9 in location 1057
-run/0: instruction clear-screen/13
-run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
-run/0: ingredient 0 is -6
-run/0: jumping to instruction 8
-run/0: instruction clear-screen/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 9
-run/0: ingredient 1 is max
-mem/0: location 1056 is 15
-run/0: product 0 is 0
-mem/0: storing 0 in location 1058
-run/0: instruction clear-screen/9
-run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
-mem/0: location 1058 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction clear-screen/10
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address/27 {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is buf
-mem/0: location 1055 is 1036
-run/0: ingredient 1 is {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-mem/0: location 1057 is 9
-run/0: address to copy is 1046
-run/0: product 0 is 1046
-mem/0: storing 1046 in location 1059
-run/0: instruction clear-screen/11
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy/1 {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
-run/0: ingredient 0 is  
-mem/0: location 1059 is 1046
-mem/0: storing 0 in location 1046
-run/0: instruction clear-screen/12
-run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 9
-run/0: ingredient 1 is 1
-run/0: product 0 is 10
-mem/0: storing 10 in location 1057
-run/0: instruction clear-screen/13
-run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
-run/0: ingredient 0 is -6
-run/0: jumping to instruction 8
-run/0: instruction clear-screen/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 10
-run/0: ingredient 1 is max
-mem/0: location 1056 is 15
-run/0: product 0 is 0
-mem/0: storing 0 in location 1058
-run/0: instruction clear-screen/9
-run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
-mem/0: location 1058 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction clear-screen/10
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address/27 {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is buf
-mem/0: location 1055 is 1036
-run/0: ingredient 1 is {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-mem/0: location 1057 is 10
-run/0: address to copy is 1047
-run/0: product 0 is 1047
-mem/0: storing 1047 in location 1059
-run/0: instruction clear-screen/11
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy/1 {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
-run/0: ingredient 0 is  
-mem/0: location 1059 is 1047
-mem/0: storing 0 in location 1047
-run/0: instruction clear-screen/12
-run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 10
-run/0: ingredient 1 is 1
-run/0: product 0 is 11
-mem/0: storing 11 in location 1057
-run/0: instruction clear-screen/13
-run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
-run/0: ingredient 0 is -6
-run/0: jumping to instruction 8
-run/0: instruction clear-screen/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 11
-run/0: ingredient 1 is max
-mem/0: location 1056 is 15
-run/0: product 0 is 0
-mem/0: storing 0 in location 1058
-run/0: instruction clear-screen/9
-run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
-mem/0: location 1058 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction clear-screen/10
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address/27 {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is buf
-mem/0: location 1055 is 1036
-run/0: ingredient 1 is {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-mem/0: location 1057 is 11
-run/0: address to copy is 1048
-run/0: product 0 is 1048
-mem/0: storing 1048 in location 1059
-run/0: instruction clear-screen/11
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy/1 {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
-run/0: ingredient 0 is  
-mem/0: location 1059 is 1048
-mem/0: storing 0 in location 1048
-run/0: instruction clear-screen/12
-run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 11
-run/0: ingredient 1 is 1
-run/0: product 0 is 12
-mem/0: storing 12 in location 1057
-run/0: instruction clear-screen/13
-run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
-run/0: ingredient 0 is -6
-run/0: jumping to instruction 8
-run/0: instruction clear-screen/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 12
-run/0: ingredient 1 is max
-mem/0: location 1056 is 15
-run/0: product 0 is 0
-mem/0: storing 0 in location 1058
-run/0: instruction clear-screen/9
-run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
-mem/0: location 1058 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction clear-screen/10
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address/27 {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is buf
-mem/0: location 1055 is 1036
-run/0: ingredient 1 is {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-mem/0: location 1057 is 12
-run/0: address to copy is 1049
-run/0: product 0 is 1049
-mem/0: storing 1049 in location 1059
-run/0: instruction clear-screen/11
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy/1 {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
-run/0: ingredient 0 is  
-mem/0: location 1059 is 1049
-mem/0: storing 0 in location 1049
-run/0: instruction clear-screen/12
-run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 12
-run/0: ingredient 1 is 1
-run/0: product 0 is 13
-mem/0: storing 13 in location 1057
-run/0: instruction clear-screen/13
-run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
-run/0: ingredient 0 is -6
-run/0: jumping to instruction 8
-run/0: instruction clear-screen/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 13
-run/0: ingredient 1 is max
-mem/0: location 1056 is 15
-run/0: product 0 is 0
-mem/0: storing 0 in location 1058
-run/0: instruction clear-screen/9
-run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
-mem/0: location 1058 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction clear-screen/10
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address/27 {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is buf
-mem/0: location 1055 is 1036
-run/0: ingredient 1 is {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-mem/0: location 1057 is 13
-run/0: address to copy is 1050
-run/0: product 0 is 1050
-mem/0: storing 1050 in location 1059
-run/0: instruction clear-screen/11
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy/1 {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
-run/0: ingredient 0 is  
-mem/0: location 1059 is 1050
-mem/0: storing 0 in location 1050
-run/0: instruction clear-screen/12
-run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 13
-run/0: ingredient 1 is 1
-run/0: product 0 is 14
-mem/0: storing 14 in location 1057
-run/0: instruction clear-screen/13
-run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
-run/0: ingredient 0 is -6
-run/0: jumping to instruction 8
-run/0: instruction clear-screen/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 14
-run/0: ingredient 1 is max
-mem/0: location 1056 is 15
-run/0: product 0 is 0
-mem/0: storing 0 in location 1058
-run/0: instruction clear-screen/9
-run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
-mem/0: location 1058 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction clear-screen/10
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address/27 {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is buf
-mem/0: location 1055 is 1036
-run/0: ingredient 1 is {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-mem/0: location 1057 is 14
-run/0: address to copy is 1051
-run/0: product 0 is 1051
-mem/0: storing 1051 in location 1059
-run/0: instruction clear-screen/11
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy/1 {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
-run/0: ingredient 0 is  
-mem/0: location 1059 is 1051
-mem/0: storing 0 in location 1051
-run/0: instruction clear-screen/12
-run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 14
-run/0: ingredient 1 is 1
-run/0: product 0 is 15
-mem/0: storing 15 in location 1057
-run/0: instruction clear-screen/13
-run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
-run/0: ingredient 0 is -6
-run/0: jumping to instruction 8
-run/0: instruction clear-screen/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 15
-run/0: ingredient 1 is max
-mem/0: location 1056 is 15
-run/0: product 0 is 1
-mem/0: storing 1 in location 1058
-run/0: instruction clear-screen/9
-run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
-mem/0: location 1058 is 1
-run/0: ingredient 0 is 1
-run/0: ingredient 1 is 
-run/0: jumping to instruction 14
-run/0: instruction clear-screen/15
-run/0: reply/33 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "same-as-ingredient": "0"]}
-mem/0: location 1054 is 1031
-run/0: instruction init-fake-screen/14
-run/0: reply/33 {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen"]}
-mem/0: location 1002 is 1031
-run/0: result 0 is 1031
-mem/0: storing 1031 in location 900
-run/0: instruction clear-line-erases-printed-characters2/1
-run/0: run/45 {name: "
-    # print a character
-    screen:address <- print-character screen:address, 97:literal  # 'a'
-    # move cursor to start of line
-    screen:address <- move-cursor screen:address, 0:literal/row, 0:literal/column
-    # clear line
-    screen:address <- clear-line screen:address
-  ", value: 0, type: 0, properties: ["
-    # print a character
-    screen:address <- print-character screen:address, 97:literal  # 'a'
-    # move cursor to start of line
-    screen:address <- move-cursor screen:address, 0:literal/row, 0:literal/column
-    # clear line
-    screen:address <- clear-line screen:address
-  ": "literal-string"]}
-parse/0: instruction: print-character
-parse/0:   ingredient: {name: "screen", value: 0, type: 2, properties: ["screen": "address"]}
-parse/0:   ingredient: {name: "97", value: 0, type: 0, properties: ["97": "literal"]}
-parse/0:   product: {name: "screen", value: 0, type: 2, properties: ["screen": "address"]}
-parse/0: instruction: move-cursor
-parse/0:   ingredient: {name: "screen", value: 0, type: 2, properties: ["screen": "address"]}
-parse/0:   ingredient: {name: "0", value: 0, type: 0, properties: ["0": "literal", "row": ]}
-parse/0:   ingredient: {name: "0", value: 0, type: 0, properties: ["0": "literal", "column": ]}
-parse/0:   product: {name: "screen", value: 0, type: 2, properties: ["screen": "address"]}
-parse/0: instruction: clear-line
-parse/0:   ingredient: {name: "screen", value: 0, type: 2, properties: ["screen": "address"]}
-parse/0:   product: {name: "screen", value: 0, type: 2, properties: ["screen": "address"]}
-after-brace/0: recipe run1001
-after-brace/0: print-character ...
-after-brace/0: move-cursor ...
-after-brace/0: clear-line ...
-run/0: instruction run1001/0
-run/0: {name: "screen", value: 900, type: 2, properties: ["screen": "address"]} <- print-character/117 {name: "screen", value: 900, type: 2, properties: ["screen": "address"]}, {name: "97", value: 97, type: 0, properties: ["97": "literal"]}
-mem/0: location 900 is 1031
-run/0: instruction print-character/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1083
-run/0: instruction print-character/1
-run/0: {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]} <- next-ingredient/30 
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1085
-run/0: instruction print-character/2
-run/0: {name: "c", value: 2, type: 4, properties: ["c": "character"]} <- next-ingredient/30 
-run/0: product 0 is 97
-mem/0: storing 97 in location 1086
-run/0: instruction print-character/4
-run/0: break-unless/12 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]}, {name: "", value: 14, type: , properties: ["": ]}
-mem/0: location 1085 is 1031
-run/0: ingredient 0 is 1031
-run/0: jump-unless fell through
-run/0: instruction print-character/5
-run/0: {name: "row", value: 3, type: 2-1, properties: ["row": "address":"integer"]} <- get-address/25 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "cursor-row", value: 2, type: 0, properties: ["cursor-row": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1085 is 1031
-run/0: ingredient 1 is cursor-row
-run/0: address to copy is 1033
-run/0: product 0 is 1033
-mem/0: storing 1033 in location 1087
-run/0: instruction print-character/6
-run/0: {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer"]} <- get-address/25 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "cursor-column", value: 3, type: 0, properties: ["cursor-column": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1085 is 1031
-run/0: ingredient 1 is cursor-column
-run/0: address to copy is 1034
-run/0: product 0 is 1034
-mem/0: storing 1034 in location 1088
-run/0: instruction print-character/7
-run/0: {name: "width", value: 5, type: 1, properties: ["width": "integer"]} <- get/24 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "num-columns", value: 1, type: 0, properties: ["num-columns": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1085 is 1031
-run/0: ingredient 1 is num-columns
-run/0: address to copy is 1032
-run/0: its type is 1
-mem/0: location 1032 is 5
-run/0: product 0 is 5
-mem/0: storing 5 in location 1089
-run/0: instruction print-character/8
-run/0: {name: "index", value: 6, type: 1, properties: ["index": "integer"]} <- multiply/4 {name: "row", value: 3, type: 2-1, properties: ["row": "address":"integer", "deref": ]}, {name: "width", value: 5, type: 1, properties: ["width": "integer"]}
-run/0: ingredient 0 is row
-mem/0: location 1087 is 1033
-mem/0: location 1033 is 0
-run/0: ingredient 1 is width
-mem/0: location 1089 is 5
-run/0: ingredient 1 is 5
-run/0: product 0 is 0
-mem/0: storing 0 in location 1090
-run/0: instruction print-character/9
-run/0: {name: "index", value: 6, type: 1, properties: ["index": "integer"]} <- add/2 {name: "index", value: 6, type: 1, properties: ["index": "integer"]}, {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]}
-run/0: ingredient 0 is index
-mem/0: location 1090 is 0
-run/0: ingredient 1 is column
-mem/0: location 1088 is 1034
-mem/0: location 1034 is 0
-run/0: product 0 is 0
-mem/0: storing 0 in location 1090
-run/0: instruction print-character/10
-run/0: {name: "buf", value: 7, type: 2-5-4, properties: ["buf": "address":"array":"character"]} <- get/24 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "data", value: 4, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1085 is 1031
-run/0: ingredient 1 is data
-run/0: address to copy is 1035
-run/0: its type is 2
-mem/0: location 1035 is 1036
-run/0: product 0 is 1036
-mem/0: storing 1036 in location 1091
-run/0: instruction print-character/11
-run/0: {name: "cursor", value: 8, type: 2-4, properties: ["cursor": "address":"character"]} <- index-address/27 {name: "buf", value: 7, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "index", value: 6, type: 1, properties: ["index": "integer"]}
-run/0: ingredient 0 is buf
-mem/0: location 1091 is 1036
-run/0: ingredient 1 is {name: "index", value: 6, type: 1, properties: ["index": "integer"]}
-mem/0: location 1090 is 0
-run/0: address to copy is 1037
-run/0: product 0 is 1037
-mem/0: storing 1037 in location 1092
-run/0: instruction print-character/12
-run/0: {name: "cursor", value: 8, type: 2-4, properties: ["cursor": "address":"character", "deref": ]} <- copy/1 {name: "c", value: 2, type: 4, properties: ["c": "character"]}
-run/0: ingredient 0 is c
-mem/0: location 1086 is 97
-mem/0: location 1092 is 1037
-mem/0: storing 97 in location 1037
-run/0: instruction print-character/14
-run/0: {name: "at-right?", value: 9, type: 3, properties: ["at-right?": "boolean"]} <- equal/13 {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]}, {name: "width", value: 5, type: 1, properties: ["width": "integer"]}
-run/0: ingredient 0 is column
-mem/0: location 1088 is 1034
-mem/0: location 1034 is 0
-run/0: ingredient 1 is width
-mem/0: location 1089 is 5
-run/0: product 0 is 0
-mem/0: storing 0 in location 1093
-run/0: instruction print-character/15
-run/0: break-if/11 {name: "at-right?", value: 9, type: 3, properties: ["at-right?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
-mem/0: location 1093 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction print-character/16
-run/0: {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]} <- add/2 {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is column
-mem/0: location 1088 is 1034
-mem/0: location 1034 is 0
-run/0: ingredient 1 is 1
-run/0: product 0 is 1
-mem/0: location 1088 is 1034
-mem/0: storing 1 in location 1034
-run/0: instruction print-character/18
-run/0: reply/33 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "same-as-ingredient": "0"]}
-mem/0: location 1085 is 1031
-run/0: result 0 is 1031
-mem/0: storing 1031 in location 900
-run/0: instruction run1001/1
-run/0: {name: "screen", value: 900, type: 2, properties: ["screen": "address"]} <- move-cursor/120 {name: "screen", value: 900, type: 2, properties: ["screen": "address"]}, {name: "0", value: 0, type: 0, properties: ["0": "literal", "row": ]}, {name: "0", value: 0, type: 0, properties: ["0": "literal", "column": ]}
-mem/0: location 900 is 1031
-run/0: instruction move-cursor/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1114
-run/0: instruction move-cursor/1
-run/0: {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]} <- next-ingredient/30 
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1116
-run/0: instruction move-cursor/2
-run/0: {name: "new-row", value: 2, type: 1, properties: ["new-row": "integer"]} <- next-ingredient/30 
-run/0: product 0 is 0
-mem/0: storing 0 in location 1117
-run/0: instruction move-cursor/3
-run/0: {name: "new-column", value: 3, type: 1, properties: ["new-column": "integer"]} <- next-ingredient/30 
-run/0: product 0 is 0
-mem/0: storing 0 in location 1118
-run/0: instruction move-cursor/5
-run/0: break-unless/12 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]}, {name: "", value: 5, type: , properties: ["": ]}
-mem/0: location 1116 is 1031
-run/0: ingredient 0 is 1031
-run/0: jump-unless fell through
-run/0: instruction move-cursor/6
-run/0: {name: "row", value: 4, type: 2-1, properties: ["row": "address":"integer"]} <- get-address/25 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "cursor-row", value: 2, type: 0, properties: ["cursor-row": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1116 is 1031
-run/0: ingredient 1 is cursor-row
-run/0: address to copy is 1033
-run/0: product 0 is 1033
-mem/0: storing 1033 in location 1119
-run/0: instruction move-cursor/7
-run/0: {name: "row", value: 4, type: 2-1, properties: ["row": "address":"integer", "deref": ]} <- copy/1 {name: "new-row", value: 2, type: 1, properties: ["new-row": "integer"]}
-run/0: ingredient 0 is new-row
-mem/0: location 1117 is 0
-mem/0: location 1119 is 1033
-mem/0: storing 0 in location 1033
-run/0: instruction move-cursor/8
-run/0: {name: "column", value: 5, type: 2-1, properties: ["column": "address":"integer"]} <- get-address/25 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "cursor-column", value: 3, type: 0, properties: ["cursor-column": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1116 is 1031
-run/0: ingredient 1 is cursor-column
-run/0: address to copy is 1034
-run/0: product 0 is 1034
-mem/0: storing 1034 in location 1120
-run/0: instruction move-cursor/9
-run/0: {name: "column", value: 5, type: 2-1, properties: ["column": "address":"integer", "deref": ]} <- copy/1 {name: "new-column", value: 3, type: 1, properties: ["new-column": "integer"]}
-run/0: ingredient 0 is new-column
-mem/0: location 1118 is 0
-mem/0: location 1120 is 1034
-mem/0: storing 0 in location 1034
-run/0: instruction move-cursor/10
-run/0: reply/33 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "same-as-ingredient": "0"]}
-mem/0: location 1116 is 1031
-run/0: result 0 is 1031
-mem/0: storing 1031 in location 900
-run/0: instruction run1001/2
-run/0: {name: "screen", value: 900, type: 2, properties: ["screen": "address"]} <- clear-line/118 {name: "screen", value: 900, type: 2, properties: ["screen": "address"]}
-mem/0: location 900 is 1031
-run/0: instruction clear-line/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1145
-run/0: instruction clear-line/1
-run/0: {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]} <- next-ingredient/30 
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1147
-run/0: instruction clear-line/3
-run/0: break-unless/12 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]}, {name: "", value: 11, type: , properties: ["": ]}
-mem/0: location 1147 is 1031
-run/0: ingredient 0 is 1031
-run/0: jump-unless fell through
-run/0: instruction clear-line/4
-run/0: {name: "n", value: 2, type: 1, properties: ["n": "integer"]} <- get/24 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "num-columns", value: 1, type: 0, properties: ["num-columns": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1147 is 1031
-run/0: ingredient 1 is num-columns
-run/0: address to copy is 1032
-run/0: its type is 1
-mem/0: location 1032 is 5
-run/0: product 0 is 5
-mem/0: storing 5 in location 1148
-run/0: instruction clear-line/5
-run/0: {name: "column", value: 3, type: 2-1, properties: ["column": "address":"integer"]} <- get-address/25 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "cursor-column", value: 3, type: 0, properties: ["cursor-column": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1147 is 1031
-run/0: ingredient 1 is cursor-column
-run/0: address to copy is 1034
-run/0: product 0 is 1034
-mem/0: storing 1034 in location 1149
-run/0: instruction clear-line/6
-run/0: {name: "original-column", value: 4, type: 1, properties: ["original-column": "integer"]} <- copy/1 {name: "column", value: 3, type: 2-1, properties: ["column": "address":"integer", "deref": ]}
-run/0: ingredient 0 is column
-mem/0: location 1149 is 1034
-mem/0: location 1034 is 0
-mem/0: storing 0 in location 1150
-run/0: instruction clear-line/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "column", value: 3, type: 2-1, properties: ["column": "address":"integer", "deref": ]}, {name: "n", value: 2, type: 1, properties: ["n": "integer"]}
-run/0: ingredient 0 is column
-mem/0: location 1149 is 1034
-mem/0: location 1034 is 0
-run/0: ingredient 1 is n
-mem/0: location 1148 is 5
-run/0: product 0 is 0
-mem/0: storing 0 in location 1151
-run/0: instruction clear-line/9
-run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 2, type: , properties: ["": ]}
-mem/0: location 1151 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction clear-line/10
-run/0: print-character/117 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]}, {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
-mem/0: location 1147 is 1031
-run/0: instruction print-character/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1176
-run/0: instruction print-character/1
-run/0: {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]} <- next-ingredient/30 
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1178
-run/0: instruction print-character/2
-run/0: {name: "c", value: 2, type: 4, properties: ["c": "character"]} <- next-ingredient/30 
-run/0: product 0 is 0
-mem/0: storing 0 in location 1179
-run/0: instruction print-character/4
-run/0: break-unless/12 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]}, {name: "", value: 14, type: , properties: ["": ]}
-mem/0: location 1178 is 1031
-run/0: ingredient 0 is 1031
-run/0: jump-unless fell through
-run/0: instruction print-character/5
-run/0: {name: "row", value: 3, type: 2-1, properties: ["row": "address":"integer"]} <- get-address/25 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "cursor-row", value: 2, type: 0, properties: ["cursor-row": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1178 is 1031
-run/0: ingredient 1 is cursor-row
-run/0: address to copy is 1033
-run/0: product 0 is 1033
-mem/0: storing 1033 in location 1180
-run/0: instruction print-character/6
-run/0: {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer"]} <- get-address/25 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "cursor-column", value: 3, type: 0, properties: ["cursor-column": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1178 is 1031
-run/0: ingredient 1 is cursor-column
-run/0: address to copy is 1034
-run/0: product 0 is 1034
-mem/0: storing 1034 in location 1181
-run/0: instruction print-character/7
-run/0: {name: "width", value: 5, type: 1, properties: ["width": "integer"]} <- get/24 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "num-columns", value: 1, type: 0, properties: ["num-columns": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1178 is 1031
-run/0: ingredient 1 is num-columns
-run/0: address to copy is 1032
-run/0: its type is 1
-mem/0: location 1032 is 5
-run/0: product 0 is 5
-mem/0: storing 5 in location 1182
-run/0: instruction print-character/8
-run/0: {name: "index", value: 6, type: 1, properties: ["index": "integer"]} <- multiply/4 {name: "row", value: 3, type: 2-1, properties: ["row": "address":"integer", "deref": ]}, {name: "width", value: 5, type: 1, properties: ["width": "integer"]}
-run/0: ingredient 0 is row
-mem/0: location 1180 is 1033
-mem/0: location 1033 is 0
-run/0: ingredient 1 is width
-mem/0: location 1182 is 5
-run/0: ingredient 1 is 5
-run/0: product 0 is 0
-mem/0: storing 0 in location 1183
-run/0: instruction print-character/9
-run/0: {name: "index", value: 6, type: 1, properties: ["index": "integer"]} <- add/2 {name: "index", value: 6, type: 1, properties: ["index": "integer"]}, {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]}
-run/0: ingredient 0 is index
-mem/0: location 1183 is 0
-run/0: ingredient 1 is column
-mem/0: location 1181 is 1034
-mem/0: location 1034 is 0
-run/0: product 0 is 0
-mem/0: storing 0 in location 1183
-run/0: instruction print-character/10
-run/0: {name: "buf", value: 7, type: 2-5-4, properties: ["buf": "address":"array":"character"]} <- get/24 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "data", value: 4, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1178 is 1031
-run/0: ingredient 1 is data
-run/0: address to copy is 1035
-run/0: its type is 2
-mem/0: location 1035 is 1036
-run/0: product 0 is 1036
-mem/0: storing 1036 in location 1184
-run/0: instruction print-character/11
-run/0: {name: "cursor", value: 8, type: 2-4, properties: ["cursor": "address":"character"]} <- index-address/27 {name: "buf", value: 7, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "index", value: 6, type: 1, properties: ["index": "integer"]}
-run/0: ingredient 0 is buf
-mem/0: location 1184 is 1036
-run/0: ingredient 1 is {name: "index", value: 6, type: 1, properties: ["index": "integer"]}
-mem/0: location 1183 is 0
-run/0: address to copy is 1037
-run/0: product 0 is 1037
-mem/0: storing 1037 in location 1185
-run/0: instruction print-character/12
-run/0: {name: "cursor", value: 8, type: 2-4, properties: ["cursor": "address":"character", "deref": ]} <- copy/1 {name: "c", value: 2, type: 4, properties: ["c": "character"]}
-run/0: ingredient 0 is c
-mem/0: location 1179 is 0
-mem/0: location 1185 is 1037
-mem/0: storing 0 in location 1037
-run/0: instruction print-character/14
-run/0: {name: "at-right?", value: 9, type: 3, properties: ["at-right?": "boolean"]} <- equal/13 {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]}, {name: "width", value: 5, type: 1, properties: ["width": "integer"]}
-run/0: ingredient 0 is column
-mem/0: location 1181 is 1034
-mem/0: location 1034 is 0
-run/0: ingredient 1 is width
-mem/0: location 1182 is 5
-run/0: product 0 is 0
-mem/0: storing 0 in location 1186
-run/0: instruction print-character/15
-run/0: break-if/11 {name: "at-right?", value: 9, type: 3, properties: ["at-right?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
-mem/0: location 1186 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction print-character/16
-run/0: {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]} <- add/2 {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is column
-mem/0: location 1181 is 1034
-mem/0: location 1034 is 0
-run/0: ingredient 1 is 1
-run/0: product 0 is 1
-mem/0: location 1181 is 1034
-mem/0: storing 1 in location 1034
-run/0: instruction print-character/18
-run/0: reply/33 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "same-as-ingredient": "0"]}
-mem/0: location 1178 is 1031
-run/0: instruction clear-line/11
-run/0: loop/10 {name: "", value: -4, type: , properties: ["": ]}
-run/0: ingredient 0 is -4
-run/0: jumping to instruction 8
-run/0: instruction clear-line/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "column", value: 3, type: 2-1, properties: ["column": "address":"integer", "deref": ]}, {name: "n", value: 2, type: 1, properties: ["n": "integer"]}
-run/0: ingredient 0 is column
-mem/0: location 1149 is 1034
-mem/0: location 1034 is 1
-run/0: ingredient 1 is n
-mem/0: location 1148 is 5
-run/0: product 0 is 0
-mem/0: storing 0 in location 1151
-run/0: instruction clear-line/9
-run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 2, type: , properties: ["": ]}
-mem/0: location 1151 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction clear-line/10
-run/0: print-character/117 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]}, {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
-mem/0: location 1147 is 1031
-run/0: instruction print-character/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1207
-run/0: instruction print-character/1
-run/0: {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]} <- next-ingredient/30 
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1209
-run/0: instruction print-character/2
-run/0: {name: "c", value: 2, type: 4, properties: ["c": "character"]} <- next-ingredient/30 
-run/0: product 0 is 0
-mem/0: storing 0 in location 1210
-run/0: instruction print-character/4
-run/0: break-unless/12 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]}, {name: "", value: 14, type: , properties: ["": ]}
-mem/0: location 1209 is 1031
-run/0: ingredient 0 is 1031
-run/0: jump-unless fell through
-run/0: instruction print-character/5
-run/0: {name: "row", value: 3, type: 2-1, properties: ["row": "address":"integer"]} <- get-address/25 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "cursor-row", value: 2, type: 0, properties: ["cursor-row": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1209 is 1031
-run/0: ingredient 1 is cursor-row
-run/0: address to copy is 1033
-run/0: product 0 is 1033
-mem/0: storing 1033 in location 1211
-run/0: instruction print-character/6
-run/0: {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer"]} <- get-address/25 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "cursor-column", value: 3, type: 0, properties: ["cursor-column": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1209 is 1031
-run/0: ingredient 1 is cursor-column
-run/0: address to copy is 1034
-run/0: product 0 is 1034
-mem/0: storing 1034 in location 1212
-run/0: instruction print-character/7
-run/0: {name: "width", value: 5, type: 1, properties: ["width": "integer"]} <- get/24 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "num-columns", value: 1, type: 0, properties: ["num-columns": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1209 is 1031
-run/0: ingredient 1 is num-columns
-run/0: address to copy is 1032
-run/0: its type is 1
-mem/0: location 1032 is 5
-run/0: product 0 is 5
-mem/0: storing 5 in location 1213
-run/0: instruction print-character/8
-run/0: {name: "index", value: 6, type: 1, properties: ["index": "integer"]} <- multiply/4 {name: "row", value: 3, type: 2-1, properties: ["row": "address":"integer", "deref": ]}, {name: "width", value: 5, type: 1, properties: ["width": "integer"]}
-run/0: ingredient 0 is row
-mem/0: location 1211 is 1033
-mem/0: location 1033 is 0
-run/0: ingredient 1 is width
-mem/0: location 1213 is 5
-run/0: ingredient 1 is 5
-run/0: product 0 is 0
-mem/0: storing 0 in location 1214
-run/0: instruction print-character/9
-run/0: {name: "index", value: 6, type: 1, properties: ["index": "integer"]} <- add/2 {name: "index", value: 6, type: 1, properties: ["index": "integer"]}, {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]}
-run/0: ingredient 0 is index
-mem/0: location 1214 is 0
-run/0: ingredient 1 is column
-mem/0: location 1212 is 1034
-mem/0: location 1034 is 1
-run/0: product 0 is 1
-mem/0: storing 1 in location 1214
-run/0: instruction print-character/10
-run/0: {name: "buf", value: 7, type: 2-5-4, properties: ["buf": "address":"array":"character"]} <- get/24 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "data", value: 4, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1209 is 1031
-run/0: ingredient 1 is data
-run/0: address to copy is 1035
-run/0: its type is 2
-mem/0: location 1035 is 1036
-run/0: product 0 is 1036
-mem/0: storing 1036 in location 1215
-run/0: instruction print-character/11
-run/0: {name: "cursor", value: 8, type: 2-4, properties: ["cursor": "address":"character"]} <- index-address/27 {name: "buf", value: 7, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "index", value: 6, type: 1, properties: ["index": "integer"]}
-run/0: ingredient 0 is buf
-mem/0: location 1215 is 1036
-run/0: ingredient 1 is {name: "index", value: 6, type: 1, properties: ["index": "integer"]}
-mem/0: location 1214 is 1
-run/0: address to copy is 1038
-run/0: product 0 is 1038
-mem/0: storing 1038 in location 1216
-run/0: instruction print-character/12
-run/0: {name: "cursor", value: 8, type: 2-4, properties: ["cursor": "address":"character", "deref": ]} <- copy/1 {name: "c", value: 2, type: 4, properties: ["c": "character"]}
-run/0: ingredient 0 is c
-mem/0: location 1210 is 0
-mem/0: location 1216 is 1038
-mem/0: storing 0 in location 1038
-run/0: instruction print-character/14
-run/0: {name: "at-right?", value: 9, type: 3, properties: ["at-right?": "boolean"]} <- equal/13 {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]}, {name: "width", value: 5, type: 1, properties: ["width": "integer"]}
-run/0: ingredient 0 is column
-mem/0: location 1212 is 1034
-mem/0: location 1034 is 1
-run/0: ingredient 1 is width
-mem/0: location 1213 is 5
-run/0: product 0 is 0
-mem/0: storing 0 in location 1217
-run/0: instruction print-character/15
-run/0: break-if/11 {name: "at-right?", value: 9, type: 3, properties: ["at-right?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
-mem/0: location 1217 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction print-character/16
-run/0: {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]} <- add/2 {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is column
-mem/0: location 1212 is 1034
-mem/0: location 1034 is 1
-run/0: ingredient 1 is 1
-run/0: product 0 is 2
-mem/0: location 1212 is 1034
-mem/0: storing 2 in location 1034
-run/0: instruction print-character/18
-run/0: reply/33 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "same-as-ingredient": "0"]}
-mem/0: location 1209 is 1031
-run/0: instruction clear-line/11
-run/0: loop/10 {name: "", value: -4, type: , properties: ["": ]}
-run/0: ingredient 0 is -4
-run/0: jumping to instruction 8
-run/0: instruction clear-line/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "column", value: 3, type: 2-1, properties: ["column": "address":"integer", "deref": ]}, {name: "n", value: 2, type: 1, properties: ["n": "integer"]}
-run/0: ingredient 0 is column
-mem/0: location 1149 is 1034
-mem/0: location 1034 is 2
-run/0: ingredient 1 is n
-mem/0: location 1148 is 5
-run/0: product 0 is 0
-mem/0: storing 0 in location 1151
-run/0: instruction clear-line/9
-run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 2, type: , properties: ["": ]}
-mem/0: location 1151 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction clear-line/10
-run/0: print-character/117 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]}, {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
-mem/0: location 1147 is 1031
-run/0: instruction print-character/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1238
-run/0: instruction print-character/1
-run/0: {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]} <- next-ingredient/30 
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1240
-run/0: instruction print-character/2
-run/0: {name: "c", value: 2, type: 4, properties: ["c": "character"]} <- next-ingredient/30 
-run/0: product 0 is 0
-mem/0: storing 0 in location 1241
-run/0: instruction print-character/4
-run/0: break-unless/12 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]}, {name: "", value: 14, type: , properties: ["": ]}
-mem/0: location 1240 is 1031
-run/0: ingredient 0 is 1031
-run/0: jump-unless fell through
-run/0: instruction print-character/5
-run/0: {name: "row", value: 3, type: 2-1, properties: ["row": "address":"integer"]} <- get-address/25 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "cursor-row", value: 2, type: 0, properties: ["cursor-row": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1240 is 1031
-run/0: ingredient 1 is cursor-row
-run/0: address to copy is 1033
-run/0: product 0 is 1033
-mem/0: storing 1033 in location 1242
-run/0: instruction print-character/6
-run/0: {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer"]} <- get-address/25 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "cursor-column", value: 3, type: 0, properties: ["cursor-column": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1240 is 1031
-run/0: ingredient 1 is cursor-column
-run/0: address to copy is 1034
-run/0: product 0 is 1034
-mem/0: storing 1034 in location 1243
-run/0: instruction print-character/7
-run/0: {name: "width", value: 5, type: 1, properties: ["width": "integer"]} <- get/24 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "num-columns", value: 1, type: 0, properties: ["num-columns": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1240 is 1031
-run/0: ingredient 1 is num-columns
-run/0: address to copy is 1032
-run/0: its type is 1
-mem/0: location 1032 is 5
-run/0: product 0 is 5
-mem/0: storing 5 in location 1244
-run/0: instruction print-character/8
-run/0: {name: "index", value: 6, type: 1, properties: ["index": "integer"]} <- multiply/4 {name: "row", value: 3, type: 2-1, properties: ["row": "address":"integer", "deref": ]}, {name: "width", value: 5, type: 1, properties: ["width": "integer"]}
-run/0: ingredient 0 is row
-mem/0: location 1242 is 1033
-mem/0: location 1033 is 0
-run/0: ingredient 1 is width
-mem/0: location 1244 is 5
-run/0: ingredient 1 is 5
-run/0: product 0 is 0
-mem/0: storing 0 in location 1245
-run/0: instruction print-character/9
-run/0: {name: "index", value: 6, type: 1, properties: ["index": "integer"]} <- add/2 {name: "index", value: 6, type: 1, properties: ["index": "integer"]}, {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]}
-run/0: ingredient 0 is index
-mem/0: location 1245 is 0
-run/0: ingredient 1 is column
-mem/0: location 1243 is 1034
-mem/0: location 1034 is 2
-run/0: product 0 is 2
-mem/0: storing 2 in location 1245
-run/0: instruction print-character/10
-run/0: {name: "buf", value: 7, type: 2-5-4, properties: ["buf": "address":"array":"character"]} <- get/24 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "data", value: 4, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1240 is 1031
-run/0: ingredient 1 is data
-run/0: address to copy is 1035
-run/0: its type is 2
-mem/0: location 1035 is 1036
-run/0: product 0 is 1036
-mem/0: storing 1036 in location 1246
-run/0: instruction print-character/11
-run/0: {name: "cursor", value: 8, type: 2-4, properties: ["cursor": "address":"character"]} <- index-address/27 {name: "buf", value: 7, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "index", value: 6, type: 1, properties: ["index": "integer"]}
-run/0: ingredient 0 is buf
-mem/0: location 1246 is 1036
-run/0: ingredient 1 is {name: "index", value: 6, type: 1, properties: ["index": "integer"]}
-mem/0: location 1245 is 2
-run/0: address to copy is 1039
-run/0: product 0 is 1039
-mem/0: storing 1039 in location 1247
-run/0: instruction print-character/12
-run/0: {name: "cursor", value: 8, type: 2-4, properties: ["cursor": "address":"character", "deref": ]} <- copy/1 {name: "c", value: 2, type: 4, properties: ["c": "character"]}
-run/0: ingredient 0 is c
-mem/0: location 1241 is 0
-mem/0: location 1247 is 1039
-mem/0: storing 0 in location 1039
-run/0: instruction print-character/14
-run/0: {name: "at-right?", value: 9, type: 3, properties: ["at-right?": "boolean"]} <- equal/13 {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]}, {name: "width", value: 5, type: 1, properties: ["width": "integer"]}
-run/0: ingredient 0 is column
-mem/0: location 1243 is 1034
-mem/0: location 1034 is 2
-run/0: ingredient 1 is width
-mem/0: location 1244 is 5
-run/0: product 0 is 0
-mem/0: storing 0 in location 1248
-run/0: instruction print-character/15
-run/0: break-if/11 {name: "at-right?", value: 9, type: 3, properties: ["at-right?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
-mem/0: location 1248 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction print-character/16
-run/0: {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]} <- add/2 {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is column
-mem/0: location 1243 is 1034
-mem/0: location 1034 is 2
-run/0: ingredient 1 is 1
-run/0: product 0 is 3
-mem/0: location 1243 is 1034
-mem/0: storing 3 in location 1034
-run/0: instruction print-character/18
-run/0: reply/33 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "same-as-ingredient": "0"]}
-mem/0: location 1240 is 1031
-run/0: instruction clear-line/11
-run/0: loop/10 {name: "", value: -4, type: , properties: ["": ]}
-run/0: ingredient 0 is -4
-run/0: jumping to instruction 8
-run/0: instruction clear-line/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "column", value: 3, type: 2-1, properties: ["column": "address":"integer", "deref": ]}, {name: "n", value: 2, type: 1, properties: ["n": "integer"]}
-run/0: ingredient 0 is column
-mem/0: location 1149 is 1034
-mem/0: location 1034 is 3
-run/0: ingredient 1 is n
-mem/0: location 1148 is 5
-run/0: product 0 is 0
-mem/0: storing 0 in location 1151
-run/0: instruction clear-line/9
-run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 2, type: , properties: ["": ]}
-mem/0: location 1151 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction clear-line/10
-run/0: print-character/117 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]}, {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
-mem/0: location 1147 is 1031
-run/0: instruction print-character/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1269
-run/0: instruction print-character/1
-run/0: {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]} <- next-ingredient/30 
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1271
-run/0: instruction print-character/2
-run/0: {name: "c", value: 2, type: 4, properties: ["c": "character"]} <- next-ingredient/30 
-run/0: product 0 is 0
-mem/0: storing 0 in location 1272
-run/0: instruction print-character/4
-run/0: break-unless/12 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]}, {name: "", value: 14, type: , properties: ["": ]}
-mem/0: location 1271 is 1031
-run/0: ingredient 0 is 1031
-run/0: jump-unless fell through
-run/0: instruction print-character/5
-run/0: {name: "row", value: 3, type: 2-1, properties: ["row": "address":"integer"]} <- get-address/25 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "cursor-row", value: 2, type: 0, properties: ["cursor-row": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1271 is 1031
-run/0: ingredient 1 is cursor-row
-run/0: address to copy is 1033
-run/0: product 0 is 1033
-mem/0: storing 1033 in location 1273
-run/0: instruction print-character/6
-run/0: {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer"]} <- get-address/25 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "cursor-column", value: 3, type: 0, properties: ["cursor-column": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1271 is 1031
-run/0: ingredient 1 is cursor-column
-run/0: address to copy is 1034
-run/0: product 0 is 1034
-mem/0: storing 1034 in location 1274
-run/0: instruction print-character/7
-run/0: {name: "width", value: 5, type: 1, properties: ["width": "integer"]} <- get/24 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "num-columns", value: 1, type: 0, properties: ["num-columns": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1271 is 1031
-run/0: ingredient 1 is num-columns
-run/0: address to copy is 1032
-run/0: its type is 1
-mem/0: location 1032 is 5
-run/0: product 0 is 5
-mem/0: storing 5 in location 1275
-run/0: instruction print-character/8
-run/0: {name: "index", value: 6, type: 1, properties: ["index": "integer"]} <- multiply/4 {name: "row", value: 3, type: 2-1, properties: ["row": "address":"integer", "deref": ]}, {name: "width", value: 5, type: 1, properties: ["width": "integer"]}
-run/0: ingredient 0 is row
-mem/0: location 1273 is 1033
-mem/0: location 1033 is 0
-run/0: ingredient 1 is width
-mem/0: location 1275 is 5
-run/0: ingredient 1 is 5
-run/0: product 0 is 0
-mem/0: storing 0 in location 1276
-run/0: instruction print-character/9
-run/0: {name: "index", value: 6, type: 1, properties: ["index": "integer"]} <- add/2 {name: "index", value: 6, type: 1, properties: ["index": "integer"]}, {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]}
-run/0: ingredient 0 is index
-mem/0: location 1276 is 0
-run/0: ingredient 1 is column
-mem/0: location 1274 is 1034
-mem/0: location 1034 is 3
-run/0: product 0 is 3
-mem/0: storing 3 in location 1276
-run/0: instruction print-character/10
-run/0: {name: "buf", value: 7, type: 2-5-4, properties: ["buf": "address":"array":"character"]} <- get/24 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "data", value: 4, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1271 is 1031
-run/0: ingredient 1 is data
-run/0: address to copy is 1035
-run/0: its type is 2
-mem/0: location 1035 is 1036
-run/0: product 0 is 1036
-mem/0: storing 1036 in location 1277
-run/0: instruction print-character/11
-run/0: {name: "cursor", value: 8, type: 2-4, properties: ["cursor": "address":"character"]} <- index-address/27 {name: "buf", value: 7, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "index", value: 6, type: 1, properties: ["index": "integer"]}
-run/0: ingredient 0 is buf
-mem/0: location 1277 is 1036
-run/0: ingredient 1 is {name: "index", value: 6, type: 1, properties: ["index": "integer"]}
-mem/0: location 1276 is 3
-run/0: address to copy is 1040
-run/0: product 0 is 1040
-mem/0: storing 1040 in location 1278
-run/0: instruction print-character/12
-run/0: {name: "cursor", value: 8, type: 2-4, properties: ["cursor": "address":"character", "deref": ]} <- copy/1 {name: "c", value: 2, type: 4, properties: ["c": "character"]}
-run/0: ingredient 0 is c
-mem/0: location 1272 is 0
-mem/0: location 1278 is 1040
-mem/0: storing 0 in location 1040
-run/0: instruction print-character/14
-run/0: {name: "at-right?", value: 9, type: 3, properties: ["at-right?": "boolean"]} <- equal/13 {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]}, {name: "width", value: 5, type: 1, properties: ["width": "integer"]}
-run/0: ingredient 0 is column
-mem/0: location 1274 is 1034
-mem/0: location 1034 is 3
-run/0: ingredient 1 is width
-mem/0: location 1275 is 5
-run/0: product 0 is 0
-mem/0: storing 0 in location 1279
-run/0: instruction print-character/15
-run/0: break-if/11 {name: "at-right?", value: 9, type: 3, properties: ["at-right?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
-mem/0: location 1279 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction print-character/16
-run/0: {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]} <- add/2 {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is column
-mem/0: location 1274 is 1034
-mem/0: location 1034 is 3
-run/0: ingredient 1 is 1
-run/0: product 0 is 4
-mem/0: location 1274 is 1034
-mem/0: storing 4 in location 1034
-run/0: instruction print-character/18
-run/0: reply/33 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "same-as-ingredient": "0"]}
-mem/0: location 1271 is 1031
-run/0: instruction clear-line/11
-run/0: loop/10 {name: "", value: -4, type: , properties: ["": ]}
-run/0: ingredient 0 is -4
-run/0: jumping to instruction 8
-run/0: instruction clear-line/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "column", value: 3, type: 2-1, properties: ["column": "address":"integer", "deref": ]}, {name: "n", value: 2, type: 1, properties: ["n": "integer"]}
-run/0: ingredient 0 is column
-mem/0: location 1149 is 1034
-mem/0: location 1034 is 4
-run/0: ingredient 1 is n
-mem/0: location 1148 is 5
-run/0: product 0 is 0
-mem/0: storing 0 in location 1151
-run/0: instruction clear-line/9
-run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 2, type: , properties: ["": ]}
-mem/0: location 1151 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction clear-line/10
-run/0: print-character/117 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]}, {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
-mem/0: location 1147 is 1031
-run/0: instruction print-character/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1300
-run/0: instruction print-character/1
-run/0: {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]} <- next-ingredient/30 
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1302
-run/0: instruction print-character/2
-run/0: {name: "c", value: 2, type: 4, properties: ["c": "character"]} <- next-ingredient/30 
-run/0: product 0 is 0
-mem/0: storing 0 in location 1303
-run/0: instruction print-character/4
-run/0: break-unless/12 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]}, {name: "", value: 14, type: , properties: ["": ]}
-mem/0: location 1302 is 1031
-run/0: ingredient 0 is 1031
-run/0: jump-unless fell through
-run/0: instruction print-character/5
-run/0: {name: "row", value: 3, type: 2-1, properties: ["row": "address":"integer"]} <- get-address/25 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "cursor-row", value: 2, type: 0, properties: ["cursor-row": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1302 is 1031
-run/0: ingredient 1 is cursor-row
-run/0: address to copy is 1033
-run/0: product 0 is 1033
-mem/0: storing 1033 in location 1304
-run/0: instruction print-character/6
-run/0: {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer"]} <- get-address/25 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "cursor-column", value: 3, type: 0, properties: ["cursor-column": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1302 is 1031
-run/0: ingredient 1 is cursor-column
-run/0: address to copy is 1034
-run/0: product 0 is 1034
-mem/0: storing 1034 in location 1305
-run/0: instruction print-character/7
-run/0: {name: "width", value: 5, type: 1, properties: ["width": "integer"]} <- get/24 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "num-columns", value: 1, type: 0, properties: ["num-columns": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1302 is 1031
-run/0: ingredient 1 is num-columns
-run/0: address to copy is 1032
-run/0: its type is 1
-mem/0: location 1032 is 5
-run/0: product 0 is 5
-mem/0: storing 5 in location 1306
-run/0: instruction print-character/8
-run/0: {name: "index", value: 6, type: 1, properties: ["index": "integer"]} <- multiply/4 {name: "row", value: 3, type: 2-1, properties: ["row": "address":"integer", "deref": ]}, {name: "width", value: 5, type: 1, properties: ["width": "integer"]}
-run/0: ingredient 0 is row
-mem/0: location 1304 is 1033
-mem/0: location 1033 is 0
-run/0: ingredient 1 is width
-mem/0: location 1306 is 5
-run/0: ingredient 1 is 5
-run/0: product 0 is 0
-mem/0: storing 0 in location 1307
-run/0: instruction print-character/9
-run/0: {name: "index", value: 6, type: 1, properties: ["index": "integer"]} <- add/2 {name: "index", value: 6, type: 1, properties: ["index": "integer"]}, {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]}
-run/0: ingredient 0 is index
-mem/0: location 1307 is 0
-run/0: ingredient 1 is column
-mem/0: location 1305 is 1034
-mem/0: location 1034 is 4
-run/0: product 0 is 4
-mem/0: storing 4 in location 1307
-run/0: instruction print-character/10
-run/0: {name: "buf", value: 7, type: 2-5-4, properties: ["buf": "address":"array":"character"]} <- get/24 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "data", value: 4, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1302 is 1031
-run/0: ingredient 1 is data
-run/0: address to copy is 1035
-run/0: its type is 2
-mem/0: location 1035 is 1036
-run/0: product 0 is 1036
-mem/0: storing 1036 in location 1308
-run/0: instruction print-character/11
-run/0: {name: "cursor", value: 8, type: 2-4, properties: ["cursor": "address":"character"]} <- index-address/27 {name: "buf", value: 7, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "index", value: 6, type: 1, properties: ["index": "integer"]}
-run/0: ingredient 0 is buf
-mem/0: location 1308 is 1036
-run/0: ingredient 1 is {name: "index", value: 6, type: 1, properties: ["index": "integer"]}
-mem/0: location 1307 is 4
-run/0: address to copy is 1041
-run/0: product 0 is 1041
-mem/0: storing 1041 in location 1309
-run/0: instruction print-character/12
-run/0: {name: "cursor", value: 8, type: 2-4, properties: ["cursor": "address":"character", "deref": ]} <- copy/1 {name: "c", value: 2, type: 4, properties: ["c": "character"]}
-run/0: ingredient 0 is c
-mem/0: location 1303 is 0
-mem/0: location 1309 is 1041
-mem/0: storing 0 in location 1041
-run/0: instruction print-character/14
-run/0: {name: "at-right?", value: 9, type: 3, properties: ["at-right?": "boolean"]} <- equal/13 {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]}, {name: "width", value: 5, type: 1, properties: ["width": "integer"]}
-run/0: ingredient 0 is column
-mem/0: location 1305 is 1034
-mem/0: location 1034 is 4
-run/0: ingredient 1 is width
-mem/0: location 1306 is 5
-run/0: product 0 is 0
-mem/0: storing 0 in location 1310
-run/0: instruction print-character/15
-run/0: break-if/11 {name: "at-right?", value: 9, type: 3, properties: ["at-right?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
-mem/0: location 1310 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction print-character/16
-run/0: {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]} <- add/2 {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is column
-mem/0: location 1305 is 1034
-mem/0: location 1034 is 4
-run/0: ingredient 1 is 1
-run/0: product 0 is 5
-mem/0: location 1305 is 1034
-mem/0: storing 5 in location 1034
-run/0: instruction print-character/18
-run/0: reply/33 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "same-as-ingredient": "0"]}
-mem/0: location 1302 is 1031
-run/0: instruction clear-line/11
-run/0: loop/10 {name: "", value: -4, type: , properties: ["": ]}
-run/0: ingredient 0 is -4
-run/0: jumping to instruction 8
-run/0: instruction clear-line/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "column", value: 3, type: 2-1, properties: ["column": "address":"integer", "deref": ]}, {name: "n", value: 2, type: 1, properties: ["n": "integer"]}
-run/0: ingredient 0 is column
-mem/0: location 1149 is 1034
-mem/0: location 1034 is 5
-run/0: ingredient 1 is n
-mem/0: location 1148 is 5
-run/0: product 0 is 1
-mem/0: storing 1 in location 1151
-run/0: instruction clear-line/9
-run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 2, type: , properties: ["": ]}
-mem/0: location 1151 is 1
-run/0: ingredient 0 is 1
-run/0: ingredient 1 is 
-run/0: jumping to instruction 12
-run/0: instruction clear-line/13
-run/0: {name: "column", value: 3, type: 2-1, properties: ["column": "address":"integer", "deref": ]} <- copy/1 {name: "original-column", value: 4, type: 1, properties: ["original-column": "integer"]}
-run/0: ingredient 0 is original-column
-mem/0: location 1150 is 0
-mem/0: location 1149 is 1034
-mem/0: storing 0 in location 1034
-run/0: instruction clear-line/14
-run/0: reply/33 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "same-as-ingredient": "0"]}
-mem/0: location 1147 is 1031
-run/0: result 0 is 1031
-mem/0: storing 1031 in location 900
-run/0: instruction clear-line-erases-printed-characters2/2
-run/0: screen-should-contain/62 {name: "
-    .     .
-    .     .
-    .     .
-  ", value: 0, type: 0, properties: ["
-    .     .
-    .     .
-    .     .
-  ": "literal-string"]}
-run/0: checking screen size at 1036
-run/0: checking location 1037
-run/0: checking location 1038
-run/0: checking location 1039
-run/0: checking location 1040
-run/0: checking location 1041
-run/0: checking location 1042
-run/0: checking location 1043
-run/0: checking location 1044
-run/0: checking location 1045
-run/0: checking location 1046
-run/0: checking location 1047
-run/0: checking location 1048
-run/0: checking location 1049
-run/0: checking location 1050
-run/0: checking location 1051
diff --git a/cpp/.traces/closure b/cpp/.traces/closure
deleted file mode 100644
index dd3a750e..00000000
--- a/cpp/.traces/closure
+++ /dev/null
@@ -1,140 +0,0 @@
-parse/0: instruction: new
-parse/0:   ingredient: {name: "location", value: 0, type: 0, properties: ["location": "type"]}
-parse/0:   ingredient: {name: "30", value: 0, type: 0, properties: ["30": "literal"]}
-parse/0:   product: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]}
-parse/0: instruction: init-counter
-parse/0:   product: {name: "1", value: 0, type: 2-5-1, properties: ["1": "address":"array":"location", "names": "init-counter"]}
-parse/0: instruction: increment-counter
-parse/0:   ingredient: {name: "1", value: 0, type: 2-5-1, properties: ["1": "address":"array":"location", "names": "init-counter"]}
-parse/0:   product: {name: "2", value: 0, type: 1, properties: ["2": "integer", "raw": ]}
-parse/0: instruction: increment-counter
-parse/0:   ingredient: {name: "1", value: 0, type: 2-5-1, properties: ["1": "address":"array":"location", "names": "init-counter"]}
-parse/0:   product: {name: "3", value: 0, type: 1, properties: ["3": "integer", "raw": ]}
-parse/0: instruction: new
-parse/0:   ingredient: {name: "location", value: 0, type: 0, properties: ["location": "type"]}
-parse/0:   ingredient: {name: "30", value: 0, type: 0, properties: ["30": "literal"]}
-parse/0:   product: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "23", value: 0, type: 0, properties: ["23": "literal"]}
-parse/0:   product: {name: "x", value: 0, type: 1, properties: ["x": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "3", value: 0, type: 0, properties: ["3": "literal"]}
-parse/0:   product: {name: "y", value: 0, type: 1, properties: ["y": "integer"]}
-parse/0: instruction: reply
-parse/0:   ingredient: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]}
-parse/0: instruction: new
-parse/0:   ingredient: {name: "space", value: 0, type: 0, properties: ["space": "literal"]}
-parse/0:   ingredient: {name: "30", value: 0, type: 0, properties: ["30": "literal"]}
-parse/0:   product: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]}
-parse/0: instruction: next-ingredient
-parse/0:   product: {name: "0", value: 0, type: 2-5-1, properties: ["0": "address":"array":"location", "names": "init-counter"]}
-parse/0: instruction: add
-parse/0:   ingredient: {name: "y", value: 0, type: 1, properties: ["y": "integer", "space": "1"]}
-parse/0:   ingredient: {name: "1", value: 0, type: 0, properties: ["1": "literal"]}
-parse/0:   product: {name: "y", value: 0, type: 1, properties: ["y": "integer", "space": "1"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "234", value: 0, type: 0, properties: ["234": "literal"]}
-parse/0:   product: {name: "y", value: 0, type: 1, properties: ["y": "integer"]}
-parse/0: instruction: reply
-parse/0:   ingredient: {name: "y", value: 0, type: 1, properties: ["y": "integer", "space": "1"]}
-name/0: recipe increment-counter is surrounded by init-counter
-new/0: location -> 1
-new/0: location -> 1
-name/0: assign x 1
-name/0: assign y 2
-new/0: space -> 0
-name/0: assign y 1
-after-brace/0: recipe main
-after-brace/0: new ...
-after-brace/0: init-counter ...
-after-brace/0: increment-counter ...
-after-brace/0: increment-counter ...
-after-brace/0: recipe init-counter
-after-brace/0: new ...
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: reply ...
-after-brace/0: recipe increment-counter
-after-brace/0: new ...
-after-brace/0: next-ingredient ...
-after-brace/0: add ...
-after-brace/0: copy ...
-after-brace/0: reply ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1000
-run/0: instruction main/1
-run/0: {name: "1", value: 1, type: 2-5-1, properties: ["1": "address":"array":"location", "names": "init-counter"]} <- init-counter/1001 
-run/0: instruction init-counter/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1031
-run/0: instruction init-counter/1
-run/0: {name: "x", value: 1, type: 1, properties: ["x": "integer"]} <- copy/1 {name: "23", value: 23, type: 0, properties: ["23": "literal"]}
-run/0: ingredient 0 is 23
-mem/0: storing 23 in location 1033
-run/0: instruction init-counter/2
-run/0: {name: "y", value: 2, type: 1, properties: ["y": "integer"]} <- copy/1 {name: "3", value: 3, type: 0, properties: ["3": "literal"]}
-run/0: ingredient 0 is 3
-mem/0: storing 3 in location 1034
-run/0: instruction init-counter/3
-run/0: reply/33 {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]}
-run/0: result 0 is 1031
-mem/0: storing 1031 in location 1002
-run/0: instruction main/2
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer", "raw": ]} <- increment-counter/1002 {name: "1", value: 1, type: 2-5-1, properties: ["1": "address":"array":"location", "names": "init-counter"]}
-mem/0: location 1002 is 1031
-run/0: instruction increment-counter/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "space", value: 0, type: 0, properties: ["space": "literal"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1062
-run/0: instruction increment-counter/1
-run/0: {name: "0", value: 0, type: 2-5-1, properties: ["0": "address":"array":"location", "names": "init-counter"]} <- next-ingredient/30 
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1063
-run/0: instruction increment-counter/2
-run/0: {name: "y", value: 2, type: 1, properties: ["y": "integer", "space": "1"]} <- add/2 {name: "y", value: 2, type: 1, properties: ["y": "integer", "space": "1"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is y
-mem/0: location 1034 is 3
-run/0: ingredient 1 is 1
-run/0: product 0 is 4
-mem/0: storing 4 in location 1034
-run/0: instruction increment-counter/3
-run/0: {name: "y", value: 1, type: 1, properties: ["y": "integer"]} <- copy/1 {name: "234", value: 234, type: 0, properties: ["234": "literal"]}
-run/0: ingredient 0 is 234
-mem/0: storing 234 in location 1064
-run/0: instruction increment-counter/4
-run/0: reply/33 {name: "y", value: 2, type: 1, properties: ["y": "integer", "space": "1"]}
-mem/0: location 1034 is 4
-run/0: result 0 is 4
-mem/0: storing 4 in location 2
-run/0: instruction main/3
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer", "raw": ]} <- increment-counter/1002 {name: "1", value: 1, type: 2-5-1, properties: ["1": "address":"array":"location", "names": "init-counter"]}
-mem/0: location 1002 is 1031
-run/0: instruction increment-counter/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "space", value: 0, type: 0, properties: ["space": "literal"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1093
-run/0: instruction increment-counter/1
-run/0: {name: "0", value: 0, type: 2-5-1, properties: ["0": "address":"array":"location", "names": "init-counter"]} <- next-ingredient/30 
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1094
-run/0: instruction increment-counter/2
-run/0: {name: "y", value: 2, type: 1, properties: ["y": "integer", "space": "1"]} <- add/2 {name: "y", value: 2, type: 1, properties: ["y": "integer", "space": "1"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is y
-mem/0: location 1034 is 4
-run/0: ingredient 1 is 1
-run/0: product 0 is 5
-mem/0: storing 5 in location 1034
-run/0: instruction increment-counter/3
-run/0: {name: "y", value: 1, type: 1, properties: ["y": "integer"]} <- copy/1 {name: "234", value: 234, type: 0, properties: ["234": "literal"]}
-run/0: ingredient 0 is 234
-mem/0: storing 234 in location 1095
-run/0: instruction increment-counter/4
-run/0: reply/33 {name: "y", value: 2, type: 1, properties: ["y": "integer", "space": "1"]}
-mem/0: location 1034 is 5
-run/0: result 0 is 5
-mem/0: storing 5 in location 3
diff --git a/cpp/.traces/container b/cpp/.traces/container
deleted file mode 100644
index 4f0dac52..00000000
--- a/cpp/.traces/container
+++ /dev/null
@@ -1,5 +0,0 @@
-parse/0: reading container foo
-parse/0:   element name: x
-parse/0:   type: 1
-parse/0:   element name: y
-parse/0:   type: 1
diff --git a/cpp/.traces/convert_names b/cpp/.traces/convert_names
deleted file mode 100644
index 5420908d..00000000
--- a/cpp/.traces/convert_names
+++ /dev/null
@@ -1,12 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-parse/0:   product: {name: "x", value: 0, type: 1, properties: ["x": "integer"]}
-name/0: assign x 1
-after-brace/0: recipe main
-after-brace/0: copy ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: {name: "x", value: 1, type: 1, properties: ["x": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
-mem/0: storing 0 in location 1
diff --git a/cpp/.traces/convert_names_handles_containers b/cpp/.traces/convert_names_handles_containers
deleted file mode 100644
index 1b50d2fb..00000000
--- a/cpp/.traces/convert_names_handles_containers
+++ /dev/null
@@ -1,11 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-parse/0:   product: {name: "a", value: 0, type: 6, properties: ["a": "point"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-parse/0:   product: {name: "b", value: 0, type: 1, properties: ["b": "integer"]}
-name/0: assign a 1
-name/0: assign b 3
-after-brace/0: recipe main
-after-brace/0: copy ...
-after-brace/0: copy ...
diff --git a/cpp/.traces/convert_names_passes_default_space b/cpp/.traces/convert_names_passes_default_space
deleted file mode 100644
index 1897c72a..00000000
--- a/cpp/.traces/convert_names_passes_default_space
+++ /dev/null
@@ -1,12 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-parse/0:   product: {name: "default-space", value: 0, type: 1, properties: ["default-space": "integer"]}
-parse/0:   product: {name: "x", value: 0, type: 1, properties: ["x": "integer"]}
-name/0: assign x 1
-after-brace/0: recipe main
-after-brace/0: copy ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: {name: "default-space", value: 0, type: 1, properties: ["default-space": "integer"]}, {name: "x", value: 1, type: 1, properties: ["x": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
diff --git a/cpp/.traces/convert_names_passes_dummy b/cpp/.traces/convert_names_passes_dummy
deleted file mode 100644
index 6a79d0a3..00000000
--- a/cpp/.traces/convert_names_passes_dummy
+++ /dev/null
@@ -1,12 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-parse/0:   product: {name: "_", value: 0, type: 0, properties: ["_": "dummy"]}
-parse/0:   product: {name: "x", value: 0, type: 1, properties: ["x": "integer"]}
-name/0: assign x 1
-after-brace/0: recipe main
-after-brace/0: copy ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: {name: "_", value: 0, type: 0, properties: ["_": "dummy"]}, {name: "x", value: 1, type: 1, properties: ["x": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
diff --git a/cpp/.traces/convert_names_passes_raw b/cpp/.traces/convert_names_passes_raw
deleted file mode 100644
index bb1c42ae..00000000
--- a/cpp/.traces/convert_names_passes_raw
+++ /dev/null
@@ -1,11 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-parse/0:   product: {name: "x", value: 0, type: 1, properties: ["x": "integer", "raw": ]}
-after-brace/0: recipe main
-after-brace/0: copy ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: {name: "x", value: 0, type: 1, properties: ["x": "integer", "raw": ]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
-mem/0: storing 0 in location 0
diff --git a/cpp/.traces/convert_names_transforms_container_elements b/cpp/.traces/convert_names_transforms_container_elements
deleted file mode 100644
index 4232571c..00000000
--- a/cpp/.traces/convert_names_transforms_container_elements
+++ /dev/null
@@ -1,35 +0,0 @@
-parse/0: instruction: get
-parse/0:   ingredient: {name: "0", value: 0, type: 6, properties: ["0": "point"]}
-parse/0:   ingredient: {name: "y", value: 0, type: 0, properties: ["y": "offset"]}
-parse/0:   product: {name: "a", value: 0, type: 1, properties: ["a": "integer"]}
-parse/0: instruction: get
-parse/0:   ingredient: {name: "0", value: 0, type: 6, properties: ["0": "point"]}
-parse/0:   ingredient: {name: "x", value: 0, type: 0, properties: ["x": "offset"]}
-parse/0:   product: {name: "b", value: 0, type: 1, properties: ["b": "integer"]}
-name/0: element y of type point is at offset 1
-name/0: assign a 1
-name/0: element x of type point is at offset 0
-name/0: assign b 2
-after-brace/0: recipe main
-after-brace/0: get ...
-after-brace/0: get ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: {name: "a", value: 1, type: 1, properties: ["a": "integer"]} <- get/24 {name: "0", value: 0, type: 6, properties: ["0": "point"]}, {name: "y", value: 1, type: 0, properties: ["y": "offset"]}
-run/0: ingredient 0 is 0
-run/0: ingredient 1 is y
-run/0: address to copy is 1
-run/0: its type is 1
-mem/0: location 1 is 0
-run/0: product 0 is 0
-mem/0: storing 0 in location 1
-run/0: instruction main/1
-run/0: {name: "b", value: 2, type: 1, properties: ["b": "integer"]} <- get/24 {name: "0", value: 0, type: 6, properties: ["0": "point"]}, {name: "x", value: 0, type: 0, properties: ["x": "offset"]}
-run/0: ingredient 0 is 0
-run/0: ingredient 1 is x
-run/0: address to copy is 0
-run/0: its type is 1
-mem/0: location 0 is 0
-run/0: product 0 is 0
-mem/0: storing 0 in location 2
diff --git a/cpp/.traces/convert_names_warns b/cpp/.traces/convert_names_warns
deleted file mode 100644
index 4615bbe6..00000000
--- a/cpp/.traces/convert_names_warns
+++ /dev/null
@@ -1,14 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "y", value: 0, type: 1, properties: ["y": "integer"]}
-parse/0:   product: {name: "x", value: 0, type: 1, properties: ["x": "integer"]}
-warn/0: use before set: y in main
-name/0: assign x 1
-after-brace/0: recipe main
-after-brace/0: copy ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: {name: "x", value: 1, type: 1, properties: ["x": "integer"]} <- copy/1 {name: "y", value: 0, type: 1, properties: ["y": "integer"]}
-run/0: ingredient 0 is y
-mem/0: location 0 is 0
-mem/0: storing 0 in location 1
diff --git a/cpp/.traces/copy b/cpp/.traces/copy
deleted file mode 100644
index ce833903..00000000
--- a/cpp/.traces/copy
+++ /dev/null
@@ -1,20 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "23", value: 0, type: 0, properties: ["23": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0:   product: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-after-brace/0: recipe main
-after-brace/0: copy ...
-after-brace/0: copy ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "23", value: 23, type: 0, properties: ["23": "literal"]}
-run/0: ingredient 0 is 23
-mem/0: storing 23 in location 1
-run/0: instruction main/1
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "1", value: 1, type: 1, properties: ["1": "integer"]}
-run/0: ingredient 0 is 1
-mem/0: location 1 is 23
-mem/0: storing 23 in location 2
diff --git a/cpp/.traces/copy_array b/cpp/.traces/copy_array
deleted file mode 100644
index 00c78037..00000000
--- a/cpp/.traces/copy_array
+++ /dev/null
@@ -1,50 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "3", value: 0, type: 0, properties: ["3": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "14", value: 0, type: 0, properties: ["14": "literal"]}
-parse/0:   product: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "15", value: 0, type: 0, properties: ["15": "literal"]}
-parse/0:   product: {name: "3", value: 0, type: 1, properties: ["3": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "16", value: 0, type: 0, properties: ["16": "literal"]}
-parse/0:   product: {name: "4", value: 0, type: 1, properties: ["4": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "1", value: 0, type: 5-1, properties: ["1": "array":"integer"]}
-parse/0:   product: {name: "5", value: 0, type: 5-1, properties: ["5": "array":"integer"]}
-after-brace/0: recipe main
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: copy ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "3", value: 3, type: 0, properties: ["3": "literal"]}
-run/0: ingredient 0 is 3
-mem/0: storing 3 in location 1
-run/0: instruction main/1
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "14", value: 14, type: 0, properties: ["14": "literal"]}
-run/0: ingredient 0 is 14
-mem/0: storing 14 in location 2
-run/0: instruction main/2
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- copy/1 {name: "15", value: 15, type: 0, properties: ["15": "literal"]}
-run/0: ingredient 0 is 15
-mem/0: storing 15 in location 3
-run/0: instruction main/3
-run/0: {name: "4", value: 4, type: 1, properties: ["4": "integer"]} <- copy/1 {name: "16", value: 16, type: 0, properties: ["16": "literal"]}
-run/0: ingredient 0 is 16
-mem/0: storing 16 in location 4
-run/0: instruction main/4
-run/0: {name: "5", value: 5, type: 5-1, properties: ["5": "array":"integer"]} <- copy/1 {name: "1", value: 1, type: 5-1, properties: ["1": "array":"integer"]}
-run/0: ingredient 0 is 1
-mem/0: location 1 is 3
-mem/0: location 2 is 14
-mem/0: location 3 is 15
-mem/0: location 4 is 16
-mem/0: storing 3 in location 5
-mem/0: storing 14 in location 6
-mem/0: storing 15 in location 7
-mem/0: storing 16 in location 8
diff --git a/cpp/.traces/copy_array_indirect b/cpp/.traces/copy_array_indirect
deleted file mode 100644
index a32cbfc9..00000000
--- a/cpp/.traces/copy_array_indirect
+++ /dev/null
@@ -1,59 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "3", value: 0, type: 0, properties: ["3": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "14", value: 0, type: 0, properties: ["14": "literal"]}
-parse/0:   product: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "15", value: 0, type: 0, properties: ["15": "literal"]}
-parse/0:   product: {name: "3", value: 0, type: 1, properties: ["3": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "16", value: 0, type: 0, properties: ["16": "literal"]}
-parse/0:   product: {name: "4", value: 0, type: 1, properties: ["4": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "1", value: 0, type: 0, properties: ["1": "literal"]}
-parse/0:   product: {name: "5", value: 0, type: 2-5-1, properties: ["5": "address":"array":"integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "5", value: 0, type: 2-5-1, properties: ["5": "address":"array":"integer", "deref": ]}
-parse/0:   product: {name: "6", value: 0, type: 5-1, properties: ["6": "array":"integer"]}
-after-brace/0: recipe main
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: copy ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "3", value: 3, type: 0, properties: ["3": "literal"]}
-run/0: ingredient 0 is 3
-mem/0: storing 3 in location 1
-run/0: instruction main/1
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "14", value: 14, type: 0, properties: ["14": "literal"]}
-run/0: ingredient 0 is 14
-mem/0: storing 14 in location 2
-run/0: instruction main/2
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- copy/1 {name: "15", value: 15, type: 0, properties: ["15": "literal"]}
-run/0: ingredient 0 is 15
-mem/0: storing 15 in location 3
-run/0: instruction main/3
-run/0: {name: "4", value: 4, type: 1, properties: ["4": "integer"]} <- copy/1 {name: "16", value: 16, type: 0, properties: ["16": "literal"]}
-run/0: ingredient 0 is 16
-mem/0: storing 16 in location 4
-run/0: instruction main/4
-run/0: {name: "5", value: 5, type: 2-5-1, properties: ["5": "address":"array":"integer"]} <- copy/1 {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is 1
-mem/0: storing 1 in location 5
-run/0: instruction main/5
-run/0: {name: "6", value: 6, type: 5-1, properties: ["6": "array":"integer"]} <- copy/1 {name: "5", value: 5, type: 2-5-1, properties: ["5": "address":"array":"integer", "deref": ]}
-run/0: ingredient 0 is 5
-mem/0: location 5 is 1
-mem/0: location 1 is 3
-mem/0: location 2 is 14
-mem/0: location 3 is 15
-mem/0: location 4 is 16
-mem/0: storing 3 in location 6
-mem/0: storing 14 in location 7
-mem/0: storing 15 in location 8
-mem/0: storing 16 in location 9
diff --git a/cpp/.traces/copy_exclusive_container b/cpp/.traces/copy_exclusive_container
deleted file mode 100644
index 3cc5ea54..00000000
--- a/cpp/.traces/copy_exclusive_container
+++ /dev/null
@@ -1,40 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "1", value: 0, type: 0, properties: ["1": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "34", value: 0, type: 0, properties: ["34": "literal"]}
-parse/0:   product: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "35", value: 0, type: 0, properties: ["35": "literal"]}
-parse/0:   product: {name: "3", value: 0, type: 1, properties: ["3": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "1", value: 0, type: 8, properties: ["1": "integer-or-point"]}
-parse/0:   product: {name: "4", value: 0, type: 8, properties: ["4": "integer-or-point"]}
-after-brace/0: recipe main
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: copy ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is 1
-mem/0: storing 1 in location 1
-run/0: instruction main/1
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
-run/0: ingredient 0 is 34
-mem/0: storing 34 in location 2
-run/0: instruction main/2
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- copy/1 {name: "35", value: 35, type: 0, properties: ["35": "literal"]}
-run/0: ingredient 0 is 35
-mem/0: storing 35 in location 3
-run/0: instruction main/3
-run/0: {name: "4", value: 4, type: 8, properties: ["4": "integer-or-point"]} <- copy/1 {name: "1", value: 1, type: 8, properties: ["1": "integer-or-point"]}
-run/0: ingredient 0 is 1
-mem/0: location 1 is 1
-mem/0: location 2 is 34
-mem/0: location 3 is 35
-mem/0: storing 1 in location 4
-mem/0: storing 34 in location 5
-mem/0: storing 35 in location 6
diff --git a/cpp/.traces/copy_handles_nested_container_elements b/cpp/.traces/copy_handles_nested_container_elements
deleted file mode 100644
index b8a57d73..00000000
--- a/cpp/.traces/copy_handles_nested_container_elements
+++ /dev/null
@@ -1,40 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "34", value: 0, type: 0, properties: ["34": "literal"]}
-parse/0:   product: {name: "12", value: 0, type: 1, properties: ["12": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "35", value: 0, type: 0, properties: ["35": "literal"]}
-parse/0:   product: {name: "13", value: 0, type: 1, properties: ["13": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "36", value: 0, type: 0, properties: ["36": "literal"]}
-parse/0:   product: {name: "14", value: 0, type: 1, properties: ["14": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "12", value: 0, type: 7, properties: ["12": "point-integer"]}
-parse/0:   product: {name: "15", value: 0, type: 7, properties: ["15": "point-integer"]}
-after-brace/0: recipe main
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: copy ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: {name: "12", value: 12, type: 1, properties: ["12": "integer"]} <- copy/1 {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
-run/0: ingredient 0 is 34
-mem/0: storing 34 in location 12
-run/0: instruction main/1
-run/0: {name: "13", value: 13, type: 1, properties: ["13": "integer"]} <- copy/1 {name: "35", value: 35, type: 0, properties: ["35": "literal"]}
-run/0: ingredient 0 is 35
-mem/0: storing 35 in location 13
-run/0: instruction main/2
-run/0: {name: "14", value: 14, type: 1, properties: ["14": "integer"]} <- copy/1 {name: "36", value: 36, type: 0, properties: ["36": "literal"]}
-run/0: ingredient 0 is 36
-mem/0: storing 36 in location 14
-run/0: instruction main/3
-run/0: {name: "15", value: 15, type: 7, properties: ["15": "point-integer"]} <- copy/1 {name: "12", value: 12, type: 7, properties: ["12": "point-integer"]}
-run/0: ingredient 0 is 12
-mem/0: location 12 is 34
-mem/0: location 13 is 35
-mem/0: location 14 is 36
-mem/0: storing 34 in location 15
-mem/0: storing 35 in location 16
-mem/0: storing 36 in location 17
diff --git a/cpp/.traces/copy_indirect b/cpp/.traces/copy_indirect
deleted file mode 100644
index 2c5ae938..00000000
--- a/cpp/.traces/copy_indirect
+++ /dev/null
@@ -1,29 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "2", value: 0, type: 0, properties: ["2": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 2-1, properties: ["1": "address":"integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "34", value: 0, type: 0, properties: ["34": "literal"]}
-parse/0:   product: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "1", value: 0, type: 2-1, properties: ["1": "address":"integer", "deref": ]}
-parse/0:   product: {name: "3", value: 0, type: 1, properties: ["3": "integer"]}
-after-brace/0: recipe main
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: copy ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 2-1, properties: ["1": "address":"integer"]} <- copy/1 {name: "2", value: 2, type: 0, properties: ["2": "literal"]}
-run/0: ingredient 0 is 2
-mem/0: storing 2 in location 1
-run/0: instruction main/1
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
-run/0: ingredient 0 is 34
-mem/0: storing 34 in location 2
-run/0: instruction main/2
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- copy/1 {name: "1", value: 1, type: 2-1, properties: ["1": "address":"integer", "deref": ]}
-run/0: ingredient 0 is 1
-mem/0: location 1 is 2
-mem/0: location 2 is 34
-mem/0: storing 34 in location 3
diff --git a/cpp/.traces/copy_literal b/cpp/.traces/copy_literal
deleted file mode 100644
index 3a25bf98..00000000
--- a/cpp/.traces/copy_literal
+++ /dev/null
@@ -1,11 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "23", value: 0, type: 0, properties: ["23": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-after-brace/0: recipe main
-after-brace/0: copy ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "23", value: 23, type: 0, properties: ["23": "literal"]}
-run/0: ingredient 0 is 23
-mem/0: storing 23 in location 1
diff --git a/cpp/.traces/copy_multiple_locations b/cpp/.traces/copy_multiple_locations
deleted file mode 100644
index 8014b483..00000000
--- a/cpp/.traces/copy_multiple_locations
+++ /dev/null
@@ -1,30 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "34", value: 0, type: 0, properties: ["34": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "35", value: 0, type: 0, properties: ["35": "literal"]}
-parse/0:   product: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "1", value: 0, type: 6, properties: ["1": "point"]}
-parse/0:   product: {name: "3", value: 0, type: 6, properties: ["3": "point"]}
-after-brace/0: recipe main
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: copy ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
-run/0: ingredient 0 is 34
-mem/0: storing 34 in location 1
-run/0: instruction main/1
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "35", value: 35, type: 0, properties: ["35": "literal"]}
-run/0: ingredient 0 is 35
-mem/0: storing 35 in location 2
-run/0: instruction main/2
-run/0: {name: "3", value: 3, type: 6, properties: ["3": "point"]} <- copy/1 {name: "1", value: 1, type: 6, properties: ["1": "point"]}
-run/0: ingredient 0 is 1
-mem/0: location 1 is 34
-mem/0: location 2 is 35
-mem/0: storing 34 in location 3
-mem/0: storing 35 in location 4
diff --git a/cpp/.traces/deref_sidesteps_default_space b/cpp/.traces/deref_sidesteps_default_space
deleted file mode 100644
index 0592d082..00000000
--- a/cpp/.traces/deref_sidesteps_default_space
+++ /dev/null
@@ -1,44 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "34", value: 0, type: 0, properties: ["34": "literal"]}
-parse/0:   product: {name: "3", value: 0, type: 1, properties: ["3": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "5", value: 0, type: 0, properties: ["5": "literal"]}
-parse/0:   product: {name: "1000", value: 0, type: 1, properties: ["1000": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "1000", value: 0, type: 0, properties: ["1000": "literal"]}
-parse/0:   product: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "3", value: 0, type: 0, properties: ["3": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 2-1, properties: ["1": "address":"integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "1", value: 0, type: 2-1, properties: ["1": "address":"integer", "deref": ]}
-parse/0:   product: {name: "8", value: 0, type: 1, properties: ["8": "integer", "raw": ]}
-after-brace/0: recipe main
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: copy ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- copy/1 {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
-run/0: ingredient 0 is 34
-mem/0: storing 34 in location 3
-run/0: instruction main/1
-run/0: {name: "1000", value: 1000, type: 1, properties: ["1000": "integer"]} <- copy/1 {name: "5", value: 5, type: 0, properties: ["5": "literal"]}
-run/0: ingredient 0 is 5
-mem/0: storing 5 in location 1000
-run/0: instruction main/2
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- copy/1 {name: "1000", value: 1000, type: 0, properties: ["1000": "literal"]}
-run/0: ingredient 0 is 1000
-run/0: instruction main/3
-run/0: {name: "1", value: 1, type: 2-1, properties: ["1": "address":"integer"]} <- copy/1 {name: "3", value: 3, type: 0, properties: ["3": "literal"]}
-run/0: ingredient 0 is 3
-mem/0: storing 3 in location 1002
-run/0: instruction main/4
-run/0: {name: "8", value: 8, type: 1, properties: ["8": "integer", "raw": ]} <- copy/1 {name: "1", value: 1, type: 2-1, properties: ["1": "address":"integer", "deref": ]}
-run/0: ingredient 0 is 1
-mem/0: location 1002 is 3
-mem/0: location 3 is 34
-mem/0: storing 34 in location 8
diff --git a/cpp/.traces/deref_sidesteps_default_space_in_get b/cpp/.traces/deref_sidesteps_default_space_in_get
deleted file mode 100644
index c4349bca..00000000
--- a/cpp/.traces/deref_sidesteps_default_space_in_get
+++ /dev/null
@@ -1,57 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "34", value: 0, type: 0, properties: ["34": "literal"]}
-parse/0:   product: {name: "12", value: 0, type: 1, properties: ["12": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "35", value: 0, type: 0, properties: ["35": "literal"]}
-parse/0:   product: {name: "13", value: 0, type: 1, properties: ["13": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "5", value: 0, type: 0, properties: ["5": "literal"]}
-parse/0:   product: {name: "1000", value: 0, type: 1, properties: ["1000": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "1000", value: 0, type: 0, properties: ["1000": "literal"]}
-parse/0:   product: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "12", value: 0, type: 0, properties: ["12": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 2-6, properties: ["1": "address":"point"]}
-parse/0: instruction: get
-parse/0:   ingredient: {name: "1", value: 0, type: 2-6, properties: ["1": "address":"point", "deref": ]}
-parse/0:   ingredient: {name: "1", value: 0, type: 0, properties: ["1": "offset"]}
-parse/0:   product: {name: "9", value: 0, type: 1, properties: ["9": "integer", "raw": ]}
-after-brace/0: recipe main
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: get ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: {name: "12", value: 12, type: 1, properties: ["12": "integer"]} <- copy/1 {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
-run/0: ingredient 0 is 34
-mem/0: storing 34 in location 12
-run/0: instruction main/1
-run/0: {name: "13", value: 13, type: 1, properties: ["13": "integer"]} <- copy/1 {name: "35", value: 35, type: 0, properties: ["35": "literal"]}
-run/0: ingredient 0 is 35
-mem/0: storing 35 in location 13
-run/0: instruction main/2
-run/0: {name: "1000", value: 1000, type: 1, properties: ["1000": "integer"]} <- copy/1 {name: "5", value: 5, type: 0, properties: ["5": "literal"]}
-run/0: ingredient 0 is 5
-mem/0: storing 5 in location 1000
-run/0: instruction main/3
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- copy/1 {name: "1000", value: 1000, type: 0, properties: ["1000": "literal"]}
-run/0: ingredient 0 is 1000
-run/0: instruction main/4
-run/0: {name: "1", value: 1, type: 2-6, properties: ["1": "address":"point"]} <- copy/1 {name: "12", value: 12, type: 0, properties: ["12": "literal"]}
-run/0: ingredient 0 is 12
-mem/0: storing 12 in location 1002
-run/0: instruction main/5
-run/0: {name: "9", value: 9, type: 1, properties: ["9": "integer", "raw": ]} <- get/24 {name: "1", value: 1, type: 2-6, properties: ["1": "address":"point", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "offset"]}
-run/0: ingredient 0 is 1
-mem/0: location 1002 is 12
-run/0: ingredient 1 is 1
-run/0: address to copy is 13
-run/0: its type is 1
-mem/0: location 13 is 35
-run/0: product 0 is 35
-mem/0: storing 35 in location 9
diff --git a/cpp/.traces/deref_sidesteps_default_space_in_index b/cpp/.traces/deref_sidesteps_default_space_in_index
deleted file mode 100644
index b18fd64d..00000000
--- a/cpp/.traces/deref_sidesteps_default_space_in_index
+++ /dev/null
@@ -1,65 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "2", value: 0, type: 0, properties: ["2": "literal"]}
-parse/0:   product: {name: "12", value: 0, type: 1, properties: ["12": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "34", value: 0, type: 0, properties: ["34": "literal"]}
-parse/0:   product: {name: "13", value: 0, type: 1, properties: ["13": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "35", value: 0, type: 0, properties: ["35": "literal"]}
-parse/0:   product: {name: "14", value: 0, type: 1, properties: ["14": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "5", value: 0, type: 0, properties: ["5": "literal"]}
-parse/0:   product: {name: "1000", value: 0, type: 1, properties: ["1000": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "1000", value: 0, type: 0, properties: ["1000": "literal"]}
-parse/0:   product: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "12", value: 0, type: 0, properties: ["12": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 2-5-1, properties: ["1": "address":"array":"integer"]}
-parse/0: instruction: index
-parse/0:   ingredient: {name: "1", value: 0, type: 2-5-1, properties: ["1": "address":"array":"integer", "deref": ]}
-parse/0:   ingredient: {name: "1", value: 0, type: 0, properties: ["1": "literal"]}
-parse/0:   product: {name: "9", value: 0, type: 1, properties: ["9": "integer", "raw": ]}
-after-brace/0: recipe main
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: index ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: {name: "12", value: 12, type: 1, properties: ["12": "integer"]} <- copy/1 {name: "2", value: 2, type: 0, properties: ["2": "literal"]}
-run/0: ingredient 0 is 2
-mem/0: storing 2 in location 12
-run/0: instruction main/1
-run/0: {name: "13", value: 13, type: 1, properties: ["13": "integer"]} <- copy/1 {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
-run/0: ingredient 0 is 34
-mem/0: storing 34 in location 13
-run/0: instruction main/2
-run/0: {name: "14", value: 14, type: 1, properties: ["14": "integer"]} <- copy/1 {name: "35", value: 35, type: 0, properties: ["35": "literal"]}
-run/0: ingredient 0 is 35
-mem/0: storing 35 in location 14
-run/0: instruction main/3
-run/0: {name: "1000", value: 1000, type: 1, properties: ["1000": "integer"]} <- copy/1 {name: "5", value: 5, type: 0, properties: ["5": "literal"]}
-run/0: ingredient 0 is 5
-mem/0: storing 5 in location 1000
-run/0: instruction main/4
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- copy/1 {name: "1000", value: 1000, type: 0, properties: ["1000": "literal"]}
-run/0: ingredient 0 is 1000
-run/0: instruction main/5
-run/0: {name: "1", value: 1, type: 2-5-1, properties: ["1": "address":"array":"integer"]} <- copy/1 {name: "12", value: 12, type: 0, properties: ["12": "literal"]}
-run/0: ingredient 0 is 12
-mem/0: storing 12 in location 1002
-run/0: instruction main/6
-run/0: {name: "9", value: 9, type: 1, properties: ["9": "integer", "raw": ]} <- index/26 {name: "1", value: 1, type: 2-5-1, properties: ["1": "address":"array":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is {name: "1", value: 1, type: 2-5-1, properties: ["1": "address":"array":"integer", "deref": ]}
-mem/0: location 1002 is 12
-run/0: ingredient 1 is {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: address to copy is 14
-run/0: its type is 1
-mem/0: location 14 is 35
-run/0: product 0 is 35
-mem/0: storing 35 in location 9
diff --git a/cpp/.traces/divide b/cpp/.traces/divide
deleted file mode 100644
index 902b84e3..00000000
--- a/cpp/.traces/divide
+++ /dev/null
@@ -1,33 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "27", value: 0, type: 0, properties: ["27": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "3", value: 0, type: 0, properties: ["3": "literal"]}
-parse/0:   product: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-parse/0: instruction: divide
-parse/0:   ingredient: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0:   ingredient: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-parse/0:   product: {name: "3", value: 0, type: 1, properties: ["3": "integer"]}
-after-brace/0: recipe main
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: divide ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "27", value: 27, type: 0, properties: ["27": "literal"]}
-run/0: ingredient 0 is 27
-mem/0: storing 27 in location 1
-run/0: instruction main/1
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "3", value: 3, type: 0, properties: ["3": "literal"]}
-run/0: ingredient 0 is 3
-mem/0: storing 3 in location 2
-run/0: instruction main/2
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- divide/5 {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "2", value: 2, type: 1, properties: ["2": "integer"]}
-run/0: ingredient 0 is 1
-mem/0: location 1 is 27
-run/0: ingredient 1 is 2
-mem/0: location 2 is 3
-run/0: ingredient 1 is 3
-run/0: product 0 is 9
-mem/0: storing 9 in location 3
diff --git a/cpp/.traces/divide_literal b/cpp/.traces/divide_literal
deleted file mode 100644
index 81ed7530..00000000
--- a/cpp/.traces/divide_literal
+++ /dev/null
@@ -1,15 +0,0 @@
-parse/0: instruction: divide
-parse/0:   ingredient: {name: "8", value: 0, type: 0, properties: ["8": "literal"]}
-parse/0:   ingredient: {name: "2", value: 0, type: 0, properties: ["2": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-after-brace/0: recipe main
-after-brace/0: divide ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- divide/5 {name: "8", value: 8, type: 0, properties: ["8": "literal"]}, {name: "2", value: 2, type: 0, properties: ["2": "literal"]}
-run/0: ingredient 0 is 8
-run/0: ingredient 1 is 2
-run/0: ingredient 1 is 2
-run/0: product 0 is 4
-mem/0: storing 4 in location 1
diff --git a/cpp/.traces/divide_with_remainder b/cpp/.traces/divide_with_remainder
deleted file mode 100644
index e99c8cf2..00000000
--- a/cpp/.traces/divide_with_remainder
+++ /dev/null
@@ -1,35 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "27", value: 0, type: 0, properties: ["27": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "11", value: 0, type: 0, properties: ["11": "literal"]}
-parse/0:   product: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-parse/0: instruction: divide-with-remainder
-parse/0:   ingredient: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0:   ingredient: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-parse/0:   product: {name: "3", value: 0, type: 1, properties: ["3": "integer"]}
-parse/0:   product: {name: "4", value: 0, type: 1, properties: ["4": "integer"]}
-after-brace/0: recipe main
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: divide-with-remainder ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "27", value: 27, type: 0, properties: ["27": "literal"]}
-run/0: ingredient 0 is 27
-mem/0: storing 27 in location 1
-run/0: instruction main/1
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "11", value: 11, type: 0, properties: ["11": "literal"]}
-run/0: ingredient 0 is 11
-mem/0: storing 11 in location 2
-run/0: instruction main/2
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]}, {name: "4", value: 4, type: 1, properties: ["4": "integer"]} <- divide-with-remainder/6 {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "2", value: 2, type: 1, properties: ["2": "integer"]}
-run/0: ingredient 0 is 1
-mem/0: location 1 is 27
-run/0: ingredient 1 is 2
-mem/0: location 2 is 11
-run/0: product 0 is 2
-mem/0: storing 2 in location 3
-run/0: product 1 is 5
-mem/0: storing 5 in location 4
diff --git a/cpp/.traces/divide_with_remainder_literal b/cpp/.traces/divide_with_remainder_literal
deleted file mode 100644
index a401ee2e..00000000
--- a/cpp/.traces/divide_with_remainder_literal
+++ /dev/null
@@ -1,17 +0,0 @@
-parse/0: instruction: divide-with-remainder
-parse/0:   ingredient: {name: "9", value: 0, type: 0, properties: ["9": "literal"]}
-parse/0:   ingredient: {name: "2", value: 0, type: 0, properties: ["2": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0:   product: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-after-brace/0: recipe main
-after-brace/0: divide-with-remainder ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- divide-with-remainder/6 {name: "9", value: 9, type: 0, properties: ["9": "literal"]}, {name: "2", value: 2, type: 0, properties: ["2": "literal"]}
-run/0: ingredient 0 is 9
-run/0: ingredient 1 is 2
-run/0: product 0 is 4
-mem/0: storing 4 in location 1
-run/0: product 1 is 1
-mem/0: storing 1 in location 2
diff --git a/cpp/.traces/equal b/cpp/.traces/equal
deleted file mode 100644
index 52cd0896..00000000
--- a/cpp/.traces/equal
+++ /dev/null
@@ -1,32 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "34", value: 0, type: 0, properties: ["34": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "33", value: 0, type: 0, properties: ["33": "literal"]}
-parse/0:   product: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-parse/0: instruction: equal
-parse/0:   ingredient: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0:   ingredient: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-parse/0:   product: {name: "3", value: 0, type: 1, properties: ["3": "integer"]}
-after-brace/0: recipe main
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: equal ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
-run/0: ingredient 0 is 34
-mem/0: storing 34 in location 1
-run/0: instruction main/1
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "33", value: 33, type: 0, properties: ["33": "literal"]}
-run/0: ingredient 0 is 33
-mem/0: storing 33 in location 2
-run/0: instruction main/2
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- equal/13 {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "2", value: 2, type: 1, properties: ["2": "integer"]}
-run/0: ingredient 0 is 1
-mem/0: location 1 is 34
-run/0: ingredient 1 is 2
-mem/0: location 2 is 33
-run/0: product 0 is 0
-mem/0: storing 0 in location 3
diff --git a/cpp/.traces/equal2 b/cpp/.traces/equal2
deleted file mode 100644
index 6d43f9f1..00000000
--- a/cpp/.traces/equal2
+++ /dev/null
@@ -1,32 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "34", value: 0, type: 0, properties: ["34": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "34", value: 0, type: 0, properties: ["34": "literal"]}
-parse/0:   product: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-parse/0: instruction: equal
-parse/0:   ingredient: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0:   ingredient: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-parse/0:   product: {name: "3", value: 0, type: 1, properties: ["3": "integer"]}
-after-brace/0: recipe main
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: equal ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
-run/0: ingredient 0 is 34
-mem/0: storing 34 in location 1
-run/0: instruction main/1
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
-run/0: ingredient 0 is 34
-mem/0: storing 34 in location 2
-run/0: instruction main/2
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- equal/13 {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "2", value: 2, type: 1, properties: ["2": "integer"]}
-run/0: ingredient 0 is 1
-mem/0: location 1 is 34
-run/0: ingredient 1 is 2
-mem/0: location 2 is 34
-run/0: product 0 is 1
-mem/0: storing 1 in location 3
diff --git a/cpp/.traces/exclusive_container b/cpp/.traces/exclusive_container
deleted file mode 100644
index ec1376fa..00000000
--- a/cpp/.traces/exclusive_container
+++ /dev/null
@@ -1,5 +0,0 @@
-parse/0: reading exclusive-container foo
-parse/0:   element name: x
-parse/0:   type: 1
-parse/0:   element name: y
-parse/0:   type: 1
diff --git a/cpp/.traces/first_recipe b/cpp/.traces/first_recipe
deleted file mode 100644
index 5cfc15c8..00000000
--- a/cpp/.traces/first_recipe
+++ /dev/null
@@ -1,3 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "23", value: 0, type: 0, properties: ["23": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
diff --git a/cpp/.traces/first_scenario_in_mu b/cpp/.traces/first_scenario_in_mu
deleted file mode 100644
index 88e3dbe0..00000000
--- a/cpp/.traces/first_scenario_in_mu
+++ /dev/null
@@ -1,42 +0,0 @@
-parse/0: instruction: run
-parse/0:   ingredient: {name: "
-    1:integer <- add 2:literal, 2:literal
-  ", value: 0, type: 0, properties: ["
-    1:integer <- add 2:literal, 2:literal
-  ": "literal-string"]}
-parse/0: instruction: memory-should-contain
-parse/0:   ingredient: {name: "
-    1 <- 4
-  ", value: 0, type: 0, properties: ["
-    1 <- 4
-  ": "literal-string"]}
-after-brace/0: recipe first_scenario_in_mu
-after-brace/0: run ...
-after-brace/0: memory-should-contain ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: first_scenario_in_mu
-run/0: instruction first_scenario_in_mu/0
-run/0: run/45 {name: "
-    1:integer <- add 2:literal, 2:literal
-  ", value: 0, type: 0, properties: ["
-    1:integer <- add 2:literal, 2:literal
-  ": "literal-string"]}
-parse/0: instruction: add
-parse/0:   ingredient: {name: "2", value: 0, type: 0, properties: ["2": "literal"]}
-parse/0:   ingredient: {name: "2", value: 0, type: 0, properties: ["2": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-after-brace/0: recipe run1001
-after-brace/0: add ...
-run/0: instruction run1001/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- add/2 {name: "2", value: 2, type: 0, properties: ["2": "literal"]}, {name: "2", value: 2, type: 0, properties: ["2": "literal"]}
-run/0: ingredient 0 is 2
-run/0: ingredient 1 is 2
-run/0: product 0 is 4
-mem/0: storing 4 in location 1
-run/0: instruction first_scenario_in_mu/1
-run/0: memory-should-contain/46 {name: "
-    1 <- 4
-  ", value: 0, type: 0, properties: ["
-    1 <- 4
-  ": "literal-string"]}
-run/0: checking location 1
diff --git a/cpp/.traces/get b/cpp/.traces/get
deleted file mode 100644
index 50aab6f2..00000000
--- a/cpp/.traces/get
+++ /dev/null
@@ -1,33 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "34", value: 0, type: 0, properties: ["34": "literal"]}
-parse/0:   product: {name: "12", value: 0, type: 1, properties: ["12": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "35", value: 0, type: 0, properties: ["35": "literal"]}
-parse/0:   product: {name: "13", value: 0, type: 1, properties: ["13": "integer"]}
-parse/0: instruction: get
-parse/0:   ingredient: {name: "12", value: 0, type: 6, properties: ["12": "point"]}
-parse/0:   ingredient: {name: "1", value: 0, type: 0, properties: ["1": "offset"]}
-parse/0:   product: {name: "15", value: 0, type: 1, properties: ["15": "integer"]}
-after-brace/0: recipe main
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: get ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: {name: "12", value: 12, type: 1, properties: ["12": "integer"]} <- copy/1 {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
-run/0: ingredient 0 is 34
-mem/0: storing 34 in location 12
-run/0: instruction main/1
-run/0: {name: "13", value: 13, type: 1, properties: ["13": "integer"]} <- copy/1 {name: "35", value: 35, type: 0, properties: ["35": "literal"]}
-run/0: ingredient 0 is 35
-mem/0: storing 35 in location 13
-run/0: instruction main/2
-run/0: {name: "15", value: 15, type: 1, properties: ["15": "integer"]} <- get/24 {name: "12", value: 12, type: 6, properties: ["12": "point"]}, {name: "1", value: 1, type: 0, properties: ["1": "offset"]}
-run/0: ingredient 0 is 12
-run/0: ingredient 1 is 1
-run/0: address to copy is 13
-run/0: its type is 1
-mem/0: location 13 is 35
-run/0: product 0 is 35
-mem/0: storing 35 in location 15
diff --git a/cpp/.traces/get_address b/cpp/.traces/get_address
deleted file mode 100644
index 7182ed20..00000000
--- a/cpp/.traces/get_address
+++ /dev/null
@@ -1,31 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "34", value: 0, type: 0, properties: ["34": "literal"]}
-parse/0:   product: {name: "12", value: 0, type: 1, properties: ["12": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "35", value: 0, type: 0, properties: ["35": "literal"]}
-parse/0:   product: {name: "13", value: 0, type: 1, properties: ["13": "integer"]}
-parse/0: instruction: get-address
-parse/0:   ingredient: {name: "12", value: 0, type: 6, properties: ["12": "point"]}
-parse/0:   ingredient: {name: "1", value: 0, type: 0, properties: ["1": "offset"]}
-parse/0:   product: {name: "15", value: 0, type: 2-1, properties: ["15": "address":"integer"]}
-after-brace/0: recipe main
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: get-address ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: {name: "12", value: 12, type: 1, properties: ["12": "integer"]} <- copy/1 {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
-run/0: ingredient 0 is 34
-mem/0: storing 34 in location 12
-run/0: instruction main/1
-run/0: {name: "13", value: 13, type: 1, properties: ["13": "integer"]} <- copy/1 {name: "35", value: 35, type: 0, properties: ["35": "literal"]}
-run/0: ingredient 0 is 35
-mem/0: storing 35 in location 13
-run/0: instruction main/2
-run/0: {name: "15", value: 15, type: 2-1, properties: ["15": "address":"integer"]} <- get-address/25 {name: "12", value: 12, type: 6, properties: ["12": "point"]}, {name: "1", value: 1, type: 0, properties: ["1": "offset"]}
-run/0: ingredient 0 is 12
-run/0: ingredient 1 is 1
-run/0: address to copy is 13
-run/0: product 0 is 13
-mem/0: storing 13 in location 15
diff --git a/cpp/.traces/get_address_indirect b/cpp/.traces/get_address_indirect
deleted file mode 100644
index e8c3c850..00000000
--- a/cpp/.traces/get_address_indirect
+++ /dev/null
@@ -1,40 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "2", value: 0, type: 0, properties: ["2": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "34", value: 0, type: 0, properties: ["34": "literal"]}
-parse/0:   product: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "35", value: 0, type: 0, properties: ["35": "literal"]}
-parse/0:   product: {name: "3", value: 0, type: 1, properties: ["3": "integer"]}
-parse/0: instruction: get-address
-parse/0:   ingredient: {name: "1", value: 0, type: 2-6, properties: ["1": "address":"point", "deref": ]}
-parse/0:   ingredient: {name: "0", value: 0, type: 0, properties: ["0": "offset"]}
-parse/0:   product: {name: "4", value: 0, type: 1, properties: ["4": "integer"]}
-after-brace/0: recipe main
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: get-address ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "2", value: 2, type: 0, properties: ["2": "literal"]}
-run/0: ingredient 0 is 2
-mem/0: storing 2 in location 1
-run/0: instruction main/1
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
-run/0: ingredient 0 is 34
-mem/0: storing 34 in location 2
-run/0: instruction main/2
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- copy/1 {name: "35", value: 35, type: 0, properties: ["35": "literal"]}
-run/0: ingredient 0 is 35
-mem/0: storing 35 in location 3
-run/0: instruction main/3
-run/0: {name: "4", value: 4, type: 1, properties: ["4": "integer"]} <- get-address/25 {name: "1", value: 1, type: 2-6, properties: ["1": "address":"point", "deref": ]}, {name: "0", value: 0, type: 0, properties: ["0": "offset"]}
-run/0: ingredient 0 is 1
-mem/0: location 1 is 2
-run/0: ingredient 1 is 0
-run/0: address to copy is 2
-run/0: product 0 is 2
-mem/0: storing 2 in location 4
diff --git a/cpp/.traces/get_default_space b/cpp/.traces/get_default_space
deleted file mode 100644
index bb513849..00000000
--- a/cpp/.traces/get_default_space
+++ /dev/null
@@ -1,18 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "10", value: 0, type: 0, properties: ["10": "literal"]}
-parse/0:   product: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer", "raw": ]}
-after-brace/0: recipe main
-after-brace/0: copy ...
-after-brace/0: copy ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- copy/1 {name: "10", value: 10, type: 0, properties: ["10": "literal"]}
-run/0: ingredient 0 is 10
-run/0: instruction main/1
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer", "raw": ]} <- copy/1 {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]}
-run/0: ingredient 0 is default-space
-mem/0: storing 10 in location 1
diff --git a/cpp/.traces/get_handles_nested_container_elements b/cpp/.traces/get_handles_nested_container_elements
deleted file mode 100644
index 6ff45ce2..00000000
--- a/cpp/.traces/get_handles_nested_container_elements
+++ /dev/null
@@ -1,41 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "34", value: 0, type: 0, properties: ["34": "literal"]}
-parse/0:   product: {name: "12", value: 0, type: 1, properties: ["12": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "35", value: 0, type: 0, properties: ["35": "literal"]}
-parse/0:   product: {name: "13", value: 0, type: 1, properties: ["13": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "36", value: 0, type: 0, properties: ["36": "literal"]}
-parse/0:   product: {name: "14", value: 0, type: 1, properties: ["14": "integer"]}
-parse/0: instruction: get
-parse/0:   ingredient: {name: "12", value: 0, type: 7, properties: ["12": "point-integer"]}
-parse/0:   ingredient: {name: "1", value: 0, type: 0, properties: ["1": "offset"]}
-parse/0:   product: {name: "15", value: 0, type: 1, properties: ["15": "integer"]}
-after-brace/0: recipe main
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: get ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: {name: "12", value: 12, type: 1, properties: ["12": "integer"]} <- copy/1 {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
-run/0: ingredient 0 is 34
-mem/0: storing 34 in location 12
-run/0: instruction main/1
-run/0: {name: "13", value: 13, type: 1, properties: ["13": "integer"]} <- copy/1 {name: "35", value: 35, type: 0, properties: ["35": "literal"]}
-run/0: ingredient 0 is 35
-mem/0: storing 35 in location 13
-run/0: instruction main/2
-run/0: {name: "14", value: 14, type: 1, properties: ["14": "integer"]} <- copy/1 {name: "36", value: 36, type: 0, properties: ["36": "literal"]}
-run/0: ingredient 0 is 36
-mem/0: storing 36 in location 14
-run/0: instruction main/3
-run/0: {name: "15", value: 15, type: 1, properties: ["15": "integer"]} <- get/24 {name: "12", value: 12, type: 7, properties: ["12": "point-integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "offset"]}
-run/0: ingredient 0 is 12
-run/0: ingredient 1 is 1
-run/0: address to copy is 14
-run/0: its type is 1
-mem/0: location 14 is 36
-run/0: product 0 is 36
-mem/0: storing 36 in location 15
diff --git a/cpp/.traces/get_indirect b/cpp/.traces/get_indirect
deleted file mode 100644
index 3d176c0c..00000000
--- a/cpp/.traces/get_indirect
+++ /dev/null
@@ -1,42 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "2", value: 0, type: 0, properties: ["2": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "34", value: 0, type: 0, properties: ["34": "literal"]}
-parse/0:   product: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "35", value: 0, type: 0, properties: ["35": "literal"]}
-parse/0:   product: {name: "3", value: 0, type: 1, properties: ["3": "integer"]}
-parse/0: instruction: get
-parse/0:   ingredient: {name: "1", value: 0, type: 2-6, properties: ["1": "address":"point", "deref": ]}
-parse/0:   ingredient: {name: "0", value: 0, type: 0, properties: ["0": "offset"]}
-parse/0:   product: {name: "4", value: 0, type: 1, properties: ["4": "integer"]}
-after-brace/0: recipe main
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: get ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "2", value: 2, type: 0, properties: ["2": "literal"]}
-run/0: ingredient 0 is 2
-mem/0: storing 2 in location 1
-run/0: instruction main/1
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
-run/0: ingredient 0 is 34
-mem/0: storing 34 in location 2
-run/0: instruction main/2
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- copy/1 {name: "35", value: 35, type: 0, properties: ["35": "literal"]}
-run/0: ingredient 0 is 35
-mem/0: storing 35 in location 3
-run/0: instruction main/3
-run/0: {name: "4", value: 4, type: 1, properties: ["4": "integer"]} <- get/24 {name: "1", value: 1, type: 2-6, properties: ["1": "address":"point", "deref": ]}, {name: "0", value: 0, type: 0, properties: ["0": "offset"]}
-run/0: ingredient 0 is 1
-mem/0: location 1 is 2
-run/0: ingredient 1 is 0
-run/0: address to copy is 2
-run/0: its type is 1
-mem/0: location 2 is 34
-run/0: product 0 is 34
-mem/0: storing 34 in location 4
diff --git a/cpp/.traces/greater_or_equal b/cpp/.traces/greater_or_equal
deleted file mode 100644
index b03df27c..00000000
--- a/cpp/.traces/greater_or_equal
+++ /dev/null
@@ -1,32 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "34", value: 0, type: 0, properties: ["34": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "33", value: 0, type: 0, properties: ["33": "literal"]}
-parse/0:   product: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-parse/0: instruction: greater-or-equal
-parse/0:   ingredient: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0:   ingredient: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-parse/0:   product: {name: "3", value: 0, type: 1, properties: ["3": "integer"]}
-after-brace/0: recipe main
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: greater-or-equal ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
-run/0: ingredient 0 is 34
-mem/0: storing 34 in location 1
-run/0: instruction main/1
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "33", value: 33, type: 0, properties: ["33": "literal"]}
-run/0: ingredient 0 is 33
-mem/0: storing 33 in location 2
-run/0: instruction main/2
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- greater-or-equal/16 {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "2", value: 2, type: 1, properties: ["2": "integer"]}
-run/0: ingredient 0 is 1
-mem/0: location 1 is 34
-run/0: ingredient 1 is 2
-mem/0: location 2 is 33
-run/0: product 0 is 1
-mem/0: storing 1 in location 3
diff --git a/cpp/.traces/greater_or_equal2 b/cpp/.traces/greater_or_equal2
deleted file mode 100644
index 6cc4e076..00000000
--- a/cpp/.traces/greater_or_equal2
+++ /dev/null
@@ -1,32 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "34", value: 0, type: 0, properties: ["34": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "34", value: 0, type: 0, properties: ["34": "literal"]}
-parse/0:   product: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-parse/0: instruction: greater-or-equal
-parse/0:   ingredient: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0:   ingredient: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-parse/0:   product: {name: "3", value: 0, type: 1, properties: ["3": "integer"]}
-after-brace/0: recipe main
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: greater-or-equal ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
-run/0: ingredient 0 is 34
-mem/0: storing 34 in location 1
-run/0: instruction main/1
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
-run/0: ingredient 0 is 34
-mem/0: storing 34 in location 2
-run/0: instruction main/2
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- greater-or-equal/16 {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "2", value: 2, type: 1, properties: ["2": "integer"]}
-run/0: ingredient 0 is 1
-mem/0: location 1 is 34
-run/0: ingredient 1 is 2
-mem/0: location 2 is 34
-run/0: product 0 is 1
-mem/0: storing 1 in location 3
diff --git a/cpp/.traces/greater_or_equal3 b/cpp/.traces/greater_or_equal3
deleted file mode 100644
index aa0e7f60..00000000
--- a/cpp/.traces/greater_or_equal3
+++ /dev/null
@@ -1,32 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "34", value: 0, type: 0, properties: ["34": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "35", value: 0, type: 0, properties: ["35": "literal"]}
-parse/0:   product: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-parse/0: instruction: greater-or-equal
-parse/0:   ingredient: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0:   ingredient: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-parse/0:   product: {name: "3", value: 0, type: 1, properties: ["3": "integer"]}
-after-brace/0: recipe main
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: greater-or-equal ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
-run/0: ingredient 0 is 34
-mem/0: storing 34 in location 1
-run/0: instruction main/1
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "35", value: 35, type: 0, properties: ["35": "literal"]}
-run/0: ingredient 0 is 35
-mem/0: storing 35 in location 2
-run/0: instruction main/2
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- greater-or-equal/16 {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "2", value: 2, type: 1, properties: ["2": "integer"]}
-run/0: ingredient 0 is 1
-mem/0: location 1 is 34
-run/0: ingredient 1 is 2
-mem/0: location 2 is 35
-run/0: product 0 is 0
-mem/0: storing 0 in location 3
diff --git a/cpp/.traces/greater_than b/cpp/.traces/greater_than
deleted file mode 100644
index 1a56cb8b..00000000
--- a/cpp/.traces/greater_than
+++ /dev/null
@@ -1,32 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "34", value: 0, type: 0, properties: ["34": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "33", value: 0, type: 0, properties: ["33": "literal"]}
-parse/0:   product: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-parse/0: instruction: greater-than
-parse/0:   ingredient: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0:   ingredient: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-parse/0:   product: {name: "3", value: 0, type: 1, properties: ["3": "integer"]}
-after-brace/0: recipe main
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: greater-than ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
-run/0: ingredient 0 is 34
-mem/0: storing 34 in location 1
-run/0: instruction main/1
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "33", value: 33, type: 0, properties: ["33": "literal"]}
-run/0: ingredient 0 is 33
-mem/0: storing 33 in location 2
-run/0: instruction main/2
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- greater-than/14 {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "2", value: 2, type: 1, properties: ["2": "integer"]}
-run/0: ingredient 0 is 1
-mem/0: location 1 is 34
-run/0: ingredient 1 is 2
-mem/0: location 2 is 33
-run/0: product 0 is 1
-mem/0: storing 1 in location 3
diff --git a/cpp/.traces/greater_than2 b/cpp/.traces/greater_than2
deleted file mode 100644
index f352176b..00000000
--- a/cpp/.traces/greater_than2
+++ /dev/null
@@ -1,32 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "34", value: 0, type: 0, properties: ["34": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "34", value: 0, type: 0, properties: ["34": "literal"]}
-parse/0:   product: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-parse/0: instruction: greater-than
-parse/0:   ingredient: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0:   ingredient: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-parse/0:   product: {name: "3", value: 0, type: 1, properties: ["3": "integer"]}
-after-brace/0: recipe main
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: greater-than ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
-run/0: ingredient 0 is 34
-mem/0: storing 34 in location 1
-run/0: instruction main/1
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
-run/0: ingredient 0 is 34
-mem/0: storing 34 in location 2
-run/0: instruction main/2
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- greater-than/14 {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "2", value: 2, type: 1, properties: ["2": "integer"]}
-run/0: ingredient 0 is 1
-mem/0: location 1 is 34
-run/0: ingredient 1 is 2
-mem/0: location 2 is 34
-run/0: product 0 is 0
-mem/0: storing 0 in location 3
diff --git a/cpp/.traces/include_nonderef_properties b/cpp/.traces/include_nonderef_properties
deleted file mode 100644
index d7eacc1a..00000000
--- a/cpp/.traces/include_nonderef_properties
+++ /dev/null
@@ -1,42 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "2", value: 0, type: 0, properties: ["2": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "34", value: 0, type: 0, properties: ["34": "literal"]}
-parse/0:   product: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "35", value: 0, type: 0, properties: ["35": "literal"]}
-parse/0:   product: {name: "3", value: 0, type: 1, properties: ["3": "integer"]}
-parse/0: instruction: get
-parse/0:   ingredient: {name: "1", value: 0, type: 2-6, properties: ["1": "address":"point", "deref": , "foo": ]}
-parse/0:   ingredient: {name: "0", value: 0, type: 0, properties: ["0": "offset"]}
-parse/0:   product: {name: "4", value: 0, type: 1, properties: ["4": "integer"]}
-after-brace/0: recipe main
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: get ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "2", value: 2, type: 0, properties: ["2": "literal"]}
-run/0: ingredient 0 is 2
-mem/0: storing 2 in location 1
-run/0: instruction main/1
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
-run/0: ingredient 0 is 34
-mem/0: storing 34 in location 2
-run/0: instruction main/2
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- copy/1 {name: "35", value: 35, type: 0, properties: ["35": "literal"]}
-run/0: ingredient 0 is 35
-mem/0: storing 35 in location 3
-run/0: instruction main/3
-run/0: {name: "4", value: 4, type: 1, properties: ["4": "integer"]} <- get/24 {name: "1", value: 1, type: 2-6, properties: ["1": "address":"point", "deref": , "foo": ]}, {name: "0", value: 0, type: 0, properties: ["0": "offset"]}
-run/0: ingredient 0 is 1
-mem/0: location 1 is 2
-run/0: ingredient 1 is 0
-run/0: address to copy is 2
-run/0: its type is 1
-mem/0: location 2 is 34
-run/0: product 0 is 34
-mem/0: storing 34 in location 4
diff --git a/cpp/.traces/index b/cpp/.traces/index
deleted file mode 100644
index 9653e872..00000000
--- a/cpp/.traces/index
+++ /dev/null
@@ -1,49 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "3", value: 0, type: 0, properties: ["3": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "14", value: 0, type: 0, properties: ["14": "literal"]}
-parse/0:   product: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "15", value: 0, type: 0, properties: ["15": "literal"]}
-parse/0:   product: {name: "3", value: 0, type: 1, properties: ["3": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "16", value: 0, type: 0, properties: ["16": "literal"]}
-parse/0:   product: {name: "4", value: 0, type: 1, properties: ["4": "integer"]}
-parse/0: instruction: index
-parse/0:   ingredient: {name: "1", value: 0, type: 5-1, properties: ["1": "array":"integer"]}
-parse/0:   ingredient: {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-parse/0:   product: {name: "5", value: 0, type: 1, properties: ["5": "integer"]}
-after-brace/0: recipe main
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: index ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "3", value: 3, type: 0, properties: ["3": "literal"]}
-run/0: ingredient 0 is 3
-mem/0: storing 3 in location 1
-run/0: instruction main/1
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "14", value: 14, type: 0, properties: ["14": "literal"]}
-run/0: ingredient 0 is 14
-mem/0: storing 14 in location 2
-run/0: instruction main/2
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- copy/1 {name: "15", value: 15, type: 0, properties: ["15": "literal"]}
-run/0: ingredient 0 is 15
-mem/0: storing 15 in location 3
-run/0: instruction main/3
-run/0: {name: "4", value: 4, type: 1, properties: ["4": "integer"]} <- copy/1 {name: "16", value: 16, type: 0, properties: ["16": "literal"]}
-run/0: ingredient 0 is 16
-mem/0: storing 16 in location 4
-run/0: instruction main/4
-run/0: {name: "5", value: 5, type: 1, properties: ["5": "integer"]} <- index/26 {name: "1", value: 1, type: 5-1, properties: ["1": "array":"integer"]}, {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is {name: "1", value: 1, type: 5-1, properties: ["1": "array":"integer"]}
-run/0: ingredient 1 is {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: address to copy is 2
-run/0: its type is 1
-mem/0: location 2 is 14
-run/0: product 0 is 14
-mem/0: storing 14 in location 5
diff --git a/cpp/.traces/index_address b/cpp/.traces/index_address
deleted file mode 100644
index c203603f..00000000
--- a/cpp/.traces/index_address
+++ /dev/null
@@ -1,47 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "3", value: 0, type: 0, properties: ["3": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "14", value: 0, type: 0, properties: ["14": "literal"]}
-parse/0:   product: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "15", value: 0, type: 0, properties: ["15": "literal"]}
-parse/0:   product: {name: "3", value: 0, type: 1, properties: ["3": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "16", value: 0, type: 0, properties: ["16": "literal"]}
-parse/0:   product: {name: "4", value: 0, type: 1, properties: ["4": "integer"]}
-parse/0: instruction: index-address
-parse/0:   ingredient: {name: "1", value: 0, type: 5-1, properties: ["1": "array":"integer"]}
-parse/0:   ingredient: {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-parse/0:   product: {name: "5", value: 0, type: 1, properties: ["5": "integer"]}
-after-brace/0: recipe main
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: index-address ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "3", value: 3, type: 0, properties: ["3": "literal"]}
-run/0: ingredient 0 is 3
-mem/0: storing 3 in location 1
-run/0: instruction main/1
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "14", value: 14, type: 0, properties: ["14": "literal"]}
-run/0: ingredient 0 is 14
-mem/0: storing 14 in location 2
-run/0: instruction main/2
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- copy/1 {name: "15", value: 15, type: 0, properties: ["15": "literal"]}
-run/0: ingredient 0 is 15
-mem/0: storing 15 in location 3
-run/0: instruction main/3
-run/0: {name: "4", value: 4, type: 1, properties: ["4": "integer"]} <- copy/1 {name: "16", value: 16, type: 0, properties: ["16": "literal"]}
-run/0: ingredient 0 is 16
-mem/0: storing 16 in location 4
-run/0: instruction main/4
-run/0: {name: "5", value: 5, type: 1, properties: ["5": "integer"]} <- index-address/27 {name: "1", value: 1, type: 5-1, properties: ["1": "array":"integer"]}, {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 1
-run/0: ingredient 1 is {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: address to copy is 2
-run/0: product 0 is 2
-mem/0: storing 2 in location 5
diff --git a/cpp/.traces/index_direct_offset b/cpp/.traces/index_direct_offset
deleted file mode 100644
index a20a3d67..00000000
--- a/cpp/.traces/index_direct_offset
+++ /dev/null
@@ -1,58 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "3", value: 0, type: 0, properties: ["3": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "14", value: 0, type: 0, properties: ["14": "literal"]}
-parse/0:   product: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "15", value: 0, type: 0, properties: ["15": "literal"]}
-parse/0:   product: {name: "3", value: 0, type: 1, properties: ["3": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "16", value: 0, type: 0, properties: ["16": "literal"]}
-parse/0:   product: {name: "4", value: 0, type: 1, properties: ["4": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-parse/0:   product: {name: "5", value: 0, type: 1, properties: ["5": "integer"]}
-parse/0: instruction: index
-parse/0:   ingredient: {name: "1", value: 0, type: 5-1, properties: ["1": "array":"integer"]}
-parse/0:   ingredient: {name: "5", value: 0, type: 1, properties: ["5": "integer"]}
-parse/0:   product: {name: "6", value: 0, type: 1, properties: ["6": "integer"]}
-after-brace/0: recipe main
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: index ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "3", value: 3, type: 0, properties: ["3": "literal"]}
-run/0: ingredient 0 is 3
-mem/0: storing 3 in location 1
-run/0: instruction main/1
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "14", value: 14, type: 0, properties: ["14": "literal"]}
-run/0: ingredient 0 is 14
-mem/0: storing 14 in location 2
-run/0: instruction main/2
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- copy/1 {name: "15", value: 15, type: 0, properties: ["15": "literal"]}
-run/0: ingredient 0 is 15
-mem/0: storing 15 in location 3
-run/0: instruction main/3
-run/0: {name: "4", value: 4, type: 1, properties: ["4": "integer"]} <- copy/1 {name: "16", value: 16, type: 0, properties: ["16": "literal"]}
-run/0: ingredient 0 is 16
-mem/0: storing 16 in location 4
-run/0: instruction main/4
-run/0: {name: "5", value: 5, type: 1, properties: ["5": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
-mem/0: storing 0 in location 5
-run/0: instruction main/5
-run/0: {name: "6", value: 6, type: 1, properties: ["6": "integer"]} <- index/26 {name: "1", value: 1, type: 5-1, properties: ["1": "array":"integer"]}, {name: "5", value: 5, type: 1, properties: ["5": "integer"]}
-run/0: ingredient 0 is {name: "1", value: 1, type: 5-1, properties: ["1": "array":"integer"]}
-run/0: ingredient 1 is {name: "5", value: 5, type: 1, properties: ["5": "integer"]}
-mem/0: location 5 is 0
-run/0: address to copy is 2
-run/0: its type is 1
-mem/0: location 2 is 14
-run/0: product 0 is 14
-mem/0: storing 14 in location 6
diff --git a/cpp/.traces/index_indirect b/cpp/.traces/index_indirect
deleted file mode 100644
index 16489d15..00000000
--- a/cpp/.traces/index_indirect
+++ /dev/null
@@ -1,58 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "3", value: 0, type: 0, properties: ["3": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "14", value: 0, type: 0, properties: ["14": "literal"]}
-parse/0:   product: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "15", value: 0, type: 0, properties: ["15": "literal"]}
-parse/0:   product: {name: "3", value: 0, type: 1, properties: ["3": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "16", value: 0, type: 0, properties: ["16": "literal"]}
-parse/0:   product: {name: "4", value: 0, type: 1, properties: ["4": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "1", value: 0, type: 0, properties: ["1": "literal"]}
-parse/0:   product: {name: "5", value: 0, type: 2-5-1, properties: ["5": "address":"array":"integer"]}
-parse/0: instruction: index
-parse/0:   ingredient: {name: "5", value: 0, type: 2-5-1, properties: ["5": "address":"array":"integer", "deref": ]}
-parse/0:   ingredient: {name: "1", value: 0, type: 0, properties: ["1": "literal"]}
-parse/0:   product: {name: "6", value: 0, type: 1, properties: ["6": "integer"]}
-after-brace/0: recipe main
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: index ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "3", value: 3, type: 0, properties: ["3": "literal"]}
-run/0: ingredient 0 is 3
-mem/0: storing 3 in location 1
-run/0: instruction main/1
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "14", value: 14, type: 0, properties: ["14": "literal"]}
-run/0: ingredient 0 is 14
-mem/0: storing 14 in location 2
-run/0: instruction main/2
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- copy/1 {name: "15", value: 15, type: 0, properties: ["15": "literal"]}
-run/0: ingredient 0 is 15
-mem/0: storing 15 in location 3
-run/0: instruction main/3
-run/0: {name: "4", value: 4, type: 1, properties: ["4": "integer"]} <- copy/1 {name: "16", value: 16, type: 0, properties: ["16": "literal"]}
-run/0: ingredient 0 is 16
-mem/0: storing 16 in location 4
-run/0: instruction main/4
-run/0: {name: "5", value: 5, type: 2-5-1, properties: ["5": "address":"array":"integer"]} <- copy/1 {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is 1
-mem/0: storing 1 in location 5
-run/0: instruction main/5
-run/0: {name: "6", value: 6, type: 1, properties: ["6": "integer"]} <- index/26 {name: "5", value: 5, type: 2-5-1, properties: ["5": "address":"array":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is {name: "5", value: 5, type: 2-5-1, properties: ["5": "address":"array":"integer", "deref": ]}
-mem/0: location 5 is 1
-run/0: ingredient 1 is {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: address to copy is 3
-run/0: its type is 1
-mem/0: location 3 is 15
-run/0: product 0 is 15
-mem/0: storing 15 in location 6
diff --git a/cpp/.traces/ingredient b/cpp/.traces/ingredient
deleted file mode 100644
index e2bc1da4..00000000
--- a/cpp/.traces/ingredient
+++ /dev/null
@@ -1,25 +0,0 @@
-parse/0: instruction: f
-parse/0:   ingredient: {name: "1", value: 0, type: 0, properties: ["1": "literal"]}
-parse/0:   ingredient: {name: "2", value: 0, type: 0, properties: ["2": "literal"]}
-parse/0: instruction: ingredient
-parse/0:   ingredient: {name: "1", value: 0, type: 0, properties: ["1": "literal"]}
-parse/0:   product: {name: "12", value: 0, type: 1, properties: ["12": "integer"]}
-parse/0: instruction: next-ingredient
-parse/0:   product: {name: "13", value: 0, type: 1, properties: ["13": "integer"]}
-parse/0:   product: {name: "1", value: 0, type: 3, properties: ["1": "boolean"]}
-after-brace/0: recipe main
-after-brace/0: f ...
-after-brace/0: recipe f
-after-brace/0: ingredient ...
-after-brace/0: next-ingredient ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: f/1001 {name: "1", value: 1, type: 0, properties: ["1": "literal"]}, {name: "2", value: 2, type: 0, properties: ["2": "literal"]}
-run/0: instruction f/0
-run/0: {name: "12", value: 12, type: 1, properties: ["12": "integer"]} <- ingredient/32 {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: product 0 is 2
-mem/0: storing 2 in location 12
-run/0: instruction f/1
-run/0: {name: "13", value: 13, type: 1, properties: ["13": "integer"]}, {name: "1", value: 1, type: 3, properties: ["1": "boolean"]} <- next-ingredient/30 
-mem/0: storing 0 in location 1
diff --git a/cpp/.traces/integer-to-decimal-digit-negative b/cpp/.traces/integer-to-decimal-digit-negative
deleted file mode 100644
index 9b4328ad..00000000
--- a/cpp/.traces/integer-to-decimal-digit-negative
+++ /dev/null
@@ -1,611 +0,0 @@
-parse/0: instruction: run
-parse/0:   ingredient: {name: "
-    1:address:array:character/raw <- integer-to-decimal-string -1:literal
-    2:array:character/raw <- copy 1:address:array:character/deref/raw
-  ", value: 0, type: 0, properties: ["
-    1:address:array:character/raw <- integer-to-decimal-string -1:literal
-    2:array:character/raw <- copy 1:address:array:character/deref/raw
-  ": "literal-string"]}
-parse/0: instruction: memory-should-contain
-parse/0:   ingredient: {name: "
-    2 <- 2
-    3 <- 45  # '-'
-    4 <- 49  # '1'
-  ", value: 0, type: 0, properties: ["
-    2 <- 2
-    3 <- 45  # '-'
-    4 <- 49  # '1'
-  ": "literal-string"]}
-after-brace/0: recipe integer-to-decimal-digit-negative
-after-brace/0: run ...
-after-brace/0: memory-should-contain ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: integer-to-decimal-digit-negative
-run/0: instruction integer-to-decimal-digit-negative/0
-run/0: run/45 {name: "
-    1:address:array:character/raw <- integer-to-decimal-string -1:literal
-    2:array:character/raw <- copy 1:address:array:character/deref/raw
-  ", value: 0, type: 0, properties: ["
-    1:address:array:character/raw <- integer-to-decimal-string -1:literal
-    2:array:character/raw <- copy 1:address:array:character/deref/raw
-  ": "literal-string"]}
-parse/0: instruction: integer-to-decimal-string
-parse/0:   ingredient: {name: "-1", value: 0, type: 0, properties: ["-1": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 2-5-4, properties: ["1": "address":"array":"character", "raw": ]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "1", value: 0, type: 2-5-4, properties: ["1": "address":"array":"character", "deref": , "raw": ]}
-parse/0:   product: {name: "2", value: 0, type: 5-4, properties: ["2": "array":"character", "raw": ]}
-after-brace/0: recipe run1001
-after-brace/0: integer-to-decimal-string ...
-after-brace/0: copy ...
-run/0: instruction run1001/0
-run/0: {name: "1", value: 1, type: 2-5-4, properties: ["1": "address":"array":"character", "raw": ]} <- integer-to-decimal-string/105 {name: "-1", value: -1, type: 0, properties: ["-1": "literal"]}
-run/0: instruction integer-to-decimal-string/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1000
-run/0: instruction integer-to-decimal-string/1
-run/0: {name: "n", value: 1, type: 1, properties: ["n": "integer"]} <- next-ingredient/30 
-run/0: product 0 is -1
-mem/0: storing -1 in location 1002
-run/0: instruction integer-to-decimal-string/3
-run/0: break-if/11 {name: "n", value: 1, type: 1, properties: ["n": "integer"]}, {name: "", value: 2, type: , properties: ["": ]}
-mem/0: location 1002 is -1
-run/0: ingredient 0 is -1
-run/0: ingredient 1 is 
-run/0: jumping to instruction 6
-run/0: instruction integer-to-decimal-string/7
-run/0: {name: "negate-result", value: 3, type: 3, properties: ["negate-result": "boolean"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
-mem/0: storing 0 in location 1004
-run/0: instruction integer-to-decimal-string/9
-run/0: {name: "negative?", value: 4, type: 3, properties: ["negative?": "boolean"]} <- lesser-than/15 {name: "n", value: 1, type: 1, properties: ["n": "integer"]}, {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is n
-mem/0: location 1002 is -1
-run/0: ingredient 1 is 0
-run/0: product 0 is 1
-mem/0: storing 1 in location 1005
-run/0: instruction integer-to-decimal-string/10
-run/0: break-unless/12 {name: "negative?", value: 4, type: 3, properties: ["negative?": "boolean"]}, {name: "", value: 2, type: , properties: ["": ]}
-mem/0: location 1005 is 1
-run/0: ingredient 0 is 1
-run/0: jump-unless fell through
-run/0: instruction integer-to-decimal-string/11
-run/0: {name: "negate-result", value: 3, type: 3, properties: ["negate-result": "boolean"]} <- copy/1 {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is 1
-mem/0: storing 1 in location 1004
-run/0: instruction integer-to-decimal-string/12
-run/0: {name: "n", value: 1, type: 1, properties: ["n": "integer"]} <- multiply/4 {name: "n", value: 1, type: 1, properties: ["n": "integer"]}, {name: "-1", value: -1, type: 0, properties: ["-1": "literal"]}
-run/0: ingredient 0 is n
-mem/0: location 1002 is -1
-run/0: ingredient 1 is -1
-run/0: ingredient 1 is -1
-run/0: product 0 is 1
-mem/0: storing 1 in location 1002
-run/0: instruction integer-to-decimal-string/14
-run/0: {name: "tmp", value: 5, type: 2-9, properties: ["tmp": "address":"buffer"]} <- init-buffer/101 {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-run/0: instruction init-buffer/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1031
-run/0: instruction init-buffer/1
-run/0: {name: "result", value: 1, type: 2-9, properties: ["result": "address":"buffer"]} <- new/44 {name: "buffer", value: 9, type: 0, properties: ["buffer": "type"]}
-mem/0: new alloc: 1062
-mem/0: storing 1062 in location 1033
-run/0: instruction init-buffer/2
-run/0: {name: "len", value: 2, type: 2-1, properties: ["len": "address":"integer"]} <- get-address/25 {name: "result", value: 1, type: 2-9, properties: ["result": "address":"buffer", "deref": ]}, {name: "length", value: 0, type: 0, properties: ["length": "offset"]}
-run/0: ingredient 0 is result
-mem/0: location 1033 is 1062
-run/0: ingredient 1 is length
-run/0: address to copy is 1062
-run/0: product 0 is 1062
-mem/0: storing 1062 in location 1034
-run/0: instruction init-buffer/3
-run/0: {name: "len", value: 2, type: 2-1, properties: ["len": "address":"integer", "deref": ]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
-mem/0: location 1034 is 1062
-mem/0: storing 0 in location 1062
-run/0: instruction init-buffer/4
-run/0: {name: "s", value: 3, type: 2-2-5-4, properties: ["s": "address":"address":"array":"character"]} <- get-address/25 {name: "result", value: 1, type: 2-9, properties: ["result": "address":"buffer", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is result
-mem/0: location 1033 is 1062
-run/0: ingredient 1 is data
-run/0: address to copy is 1063
-run/0: product 0 is 1063
-mem/0: storing 1063 in location 1035
-run/0: instruction init-buffer/5
-run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- next-ingredient/30 
-run/0: product 0 is 30
-mem/0: storing 30 in location 1036
-run/0: instruction init-buffer/6
-run/0: {name: "s", value: 3, type: 2-2-5-4, properties: ["s": "address":"address":"array":"character", "deref": ]} <- new/44 {name: "character", value: 4, type: 0, properties: ["character": "type"]}, {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}
-mem/0: location 1036 is 30
-mem/0: array size is 30
-mem/0: new alloc: 1064
-mem/0: location 1035 is 1063
-mem/0: storing 1064 in location 1063
-run/0: instruction init-buffer/7
-run/0: reply/33 {name: "result", value: 1, type: 2-9, properties: ["result": "address":"buffer"]}
-mem/0: location 1033 is 1062
-run/0: result 0 is 1062
-mem/0: storing 1062 in location 1006
-run/0: instruction integer-to-decimal-string/15
-run/0: {name: "digit-base", value: 6, type: 1, properties: ["digit-base": "integer"]} <- copy/1 {name: "48", value: 48, type: 0, properties: ["48": "literal"]}
-run/0: ingredient 0 is 48
-mem/0: storing 48 in location 1007
-run/0: instruction integer-to-decimal-string/17
-run/0: {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]} <- equal/13 {name: "n", value: 1, type: 1, properties: ["n": "integer"]}, {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is n
-mem/0: location 1002 is 1
-run/0: ingredient 1 is 0
-run/0: product 0 is 0
-mem/0: storing 0 in location 1008
-run/0: instruction integer-to-decimal-string/18
-run/0: break-if/11 {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
-mem/0: location 1008 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction integer-to-decimal-string/19
-run/0: {name: "n", value: 1, type: 1, properties: ["n": "integer"]}, {name: "digit", value: 8, type: 1, properties: ["digit": "integer"]} <- divide-with-remainder/6 {name: "n", value: 1, type: 1, properties: ["n": "integer"]}, {name: "10", value: 10, type: 0, properties: ["10": "literal"]}
-run/0: ingredient 0 is n
-mem/0: location 1002 is 1
-run/0: ingredient 1 is 10
-run/0: product 0 is 0
-mem/0: storing 0 in location 1002
-run/0: product 1 is 1
-mem/0: storing 1 in location 1009
-run/0: instruction integer-to-decimal-string/20
-run/0: {name: "c", value: 9, type: 4, properties: ["c": "character"]} <- add/2 {name: "digit-base", value: 6, type: 1, properties: ["digit-base": "integer"]}, {name: "digit", value: 8, type: 1, properties: ["digit": "integer"]}
-run/0: ingredient 0 is digit-base
-mem/0: location 1007 is 48
-run/0: ingredient 1 is digit
-mem/0: location 1009 is 1
-run/0: product 0 is 49
-mem/0: storing 49 in location 1010
-run/0: instruction integer-to-decimal-string/21
-run/0: {name: "tmp", value: 5, type: 2-9, properties: ["tmp": "address":"buffer"]} <- buffer-append/104 {name: "tmp", value: 5, type: 2-9, properties: ["tmp": "address":"buffer"]}, {name: "c", value: 9, type: 4, properties: ["c": "character"]}
-mem/0: location 1006 is 1062
-mem/0: location 1010 is 49
-run/0: instruction buffer-append/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1095
-run/0: instruction buffer-append/1
-run/0: {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]} <- next-ingredient/30 
-run/0: product 0 is 1062
-mem/0: storing 1062 in location 1097
-run/0: instruction buffer-append/2
-run/0: {name: "c", value: 2, type: 4, properties: ["c": "character"]} <- next-ingredient/30 
-run/0: product 0 is 49
-mem/0: storing 49 in location 1098
-run/0: instruction buffer-append/4
-run/0: {name: "full?", value: 3, type: 3, properties: ["full?": "boolean"]} <- buffer-full?/103 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]}
-mem/0: location 1097 is 1062
-run/0: instruction buffer-full?/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1126
-run/0: instruction buffer-full?/1
-run/0: {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]} <- next-ingredient/30 
-run/0: product 0 is 1062
-mem/0: storing 1062 in location 1128
-run/0: instruction buffer-full?/2
-run/0: {name: "len", value: 2, type: 1, properties: ["len": "integer"]} <- get/24 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "length", value: 0, type: 0, properties: ["length": "offset"]}
-run/0: ingredient 0 is in
-mem/0: location 1128 is 1062
-run/0: ingredient 1 is length
-run/0: address to copy is 1062
-run/0: its type is 1
-mem/0: location 1062 is 0
-run/0: product 0 is 0
-mem/0: storing 0 in location 1129
-run/0: instruction buffer-full?/3
-run/0: {name: "s", value: 3, type: 2-5-4, properties: ["s": "address":"array":"character"]} <- get/24 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is in
-mem/0: location 1128 is 1062
-run/0: ingredient 1 is data
-run/0: address to copy is 1063
-run/0: its type is 2
-mem/0: location 1063 is 1064
-run/0: product 0 is 1064
-mem/0: storing 1064 in location 1130
-run/0: instruction buffer-full?/4
-run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- length/28 {name: "s", value: 3, type: 2-5-4, properties: ["s": "address":"array":"character", "deref": ]}
-mem/0: location 1130 is 1064
-mem/0: storing 30 in location 1131
-run/0: instruction buffer-full?/5
-run/0: {name: "result", value: 5, type: 3, properties: ["result": "boolean"]} <- greater-or-equal/16 {name: "len", value: 2, type: 1, properties: ["len": "integer"]}, {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}
-run/0: ingredient 0 is len
-mem/0: location 1129 is 0
-run/0: ingredient 1 is capacity
-mem/0: location 1131 is 30
-run/0: product 0 is 0
-mem/0: storing 0 in location 1132
-run/0: instruction buffer-full?/6
-run/0: reply/33 {name: "result", value: 5, type: 3, properties: ["result": "boolean"]}
-mem/0: location 1132 is 0
-run/0: result 0 is 0
-mem/0: storing 0 in location 1099
-run/0: instruction buffer-append/5
-run/0: break-unless/12 {name: "full?", value: 3, type: 3, properties: ["full?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
-mem/0: location 1099 is 0
-run/0: ingredient 0 is 0
-run/0: ingredient 1 is 
-run/0: jumping to instruction 7
-run/0: instruction buffer-append/8
-run/0: {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer"]} <- get-address/25 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "length", value: 0, type: 0, properties: ["length": "offset"]}
-run/0: ingredient 0 is in
-mem/0: location 1097 is 1062
-run/0: ingredient 1 is length
-run/0: address to copy is 1062
-run/0: product 0 is 1062
-mem/0: storing 1062 in location 1100
-run/0: instruction buffer-append/9
-run/0: {name: "s", value: 5, type: 2-5-4, properties: ["s": "address":"array":"character"]} <- get/24 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is in
-mem/0: location 1097 is 1062
-run/0: ingredient 1 is data
-run/0: address to copy is 1063
-run/0: its type is 2
-mem/0: location 1063 is 1064
-run/0: product 0 is 1064
-mem/0: storing 1064 in location 1101
-run/0: instruction buffer-append/10
-run/0: {name: "dest", value: 6, type: 2-4, properties: ["dest": "address":"character"]} <- index-address/27 {name: "s", value: 5, type: 2-5-4, properties: ["s": "address":"array":"character", "deref": ]}, {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]}
-run/0: ingredient 0 is s
-mem/0: location 1101 is 1064
-run/0: ingredient 1 is {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]}
-mem/0: location 1100 is 1062
-mem/0: location 1062 is 0
-run/0: address to copy is 1065
-run/0: product 0 is 1065
-mem/0: storing 1065 in location 1102
-run/0: instruction buffer-append/11
-run/0: {name: "dest", value: 6, type: 2-4, properties: ["dest": "address":"character", "deref": ]} <- copy/1 {name: "c", value: 2, type: 4, properties: ["c": "character"]}
-run/0: ingredient 0 is c
-mem/0: location 1098 is 49
-mem/0: location 1102 is 1065
-mem/0: storing 49 in location 1065
-run/0: instruction buffer-append/12
-run/0: {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]} <- add/2 {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is len
-mem/0: location 1100 is 1062
-mem/0: location 1062 is 0
-run/0: ingredient 1 is 1
-run/0: product 0 is 1
-mem/0: location 1100 is 1062
-mem/0: storing 1 in location 1062
-run/0: instruction buffer-append/13
-run/0: reply/33 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "same-as-ingredient": "0"]}
-mem/0: location 1097 is 1062
-run/0: result 0 is 1062
-mem/0: storing 1062 in location 1006
-run/0: instruction integer-to-decimal-string/22
-run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
-run/0: ingredient 0 is -6
-run/0: jumping to instruction 17
-run/0: instruction integer-to-decimal-string/17
-run/0: {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]} <- equal/13 {name: "n", value: 1, type: 1, properties: ["n": "integer"]}, {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is n
-mem/0: location 1002 is 0
-run/0: ingredient 1 is 0
-run/0: product 0 is 1
-mem/0: storing 1 in location 1008
-run/0: instruction integer-to-decimal-string/18
-run/0: break-if/11 {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
-mem/0: location 1008 is 1
-run/0: ingredient 0 is 1
-run/0: ingredient 1 is 
-run/0: jumping to instruction 23
-run/0: instruction integer-to-decimal-string/25
-run/0: break-unless/12 {name: "negate-result", value: 3, type: 3, properties: ["negate-result": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
-mem/0: location 1004 is 1
-run/0: ingredient 0 is 1
-run/0: jump-unless fell through
-run/0: instruction integer-to-decimal-string/26
-run/0: {name: "tmp", value: 5, type: 2-9, properties: ["tmp": "address":"buffer"]} <- buffer-append/104 {name: "tmp", value: 5, type: 2-9, properties: ["tmp": "address":"buffer"]}, {name: "45", value: 45, type: 0, properties: ["45": "literal"]}
-mem/0: location 1006 is 1062
-run/0: instruction buffer-append/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1157
-run/0: instruction buffer-append/1
-run/0: {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]} <- next-ingredient/30 
-run/0: product 0 is 1062
-mem/0: storing 1062 in location 1159
-run/0: instruction buffer-append/2
-run/0: {name: "c", value: 2, type: 4, properties: ["c": "character"]} <- next-ingredient/30 
-run/0: product 0 is 45
-mem/0: storing 45 in location 1160
-run/0: instruction buffer-append/4
-run/0: {name: "full?", value: 3, type: 3, properties: ["full?": "boolean"]} <- buffer-full?/103 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]}
-mem/0: location 1159 is 1062
-run/0: instruction buffer-full?/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1188
-run/0: instruction buffer-full?/1
-run/0: {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]} <- next-ingredient/30 
-run/0: product 0 is 1062
-mem/0: storing 1062 in location 1190
-run/0: instruction buffer-full?/2
-run/0: {name: "len", value: 2, type: 1, properties: ["len": "integer"]} <- get/24 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "length", value: 0, type: 0, properties: ["length": "offset"]}
-run/0: ingredient 0 is in
-mem/0: location 1190 is 1062
-run/0: ingredient 1 is length
-run/0: address to copy is 1062
-run/0: its type is 1
-mem/0: location 1062 is 1
-run/0: product 0 is 1
-mem/0: storing 1 in location 1191
-run/0: instruction buffer-full?/3
-run/0: {name: "s", value: 3, type: 2-5-4, properties: ["s": "address":"array":"character"]} <- get/24 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is in
-mem/0: location 1190 is 1062
-run/0: ingredient 1 is data
-run/0: address to copy is 1063
-run/0: its type is 2
-mem/0: location 1063 is 1064
-run/0: product 0 is 1064
-mem/0: storing 1064 in location 1192
-run/0: instruction buffer-full?/4
-run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- length/28 {name: "s", value: 3, type: 2-5-4, properties: ["s": "address":"array":"character", "deref": ]}
-mem/0: location 1192 is 1064
-mem/0: storing 30 in location 1193
-run/0: instruction buffer-full?/5
-run/0: {name: "result", value: 5, type: 3, properties: ["result": "boolean"]} <- greater-or-equal/16 {name: "len", value: 2, type: 1, properties: ["len": "integer"]}, {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}
-run/0: ingredient 0 is len
-mem/0: location 1191 is 1
-run/0: ingredient 1 is capacity
-mem/0: location 1193 is 30
-run/0: product 0 is 0
-mem/0: storing 0 in location 1194
-run/0: instruction buffer-full?/6
-run/0: reply/33 {name: "result", value: 5, type: 3, properties: ["result": "boolean"]}
-mem/0: location 1194 is 0
-run/0: result 0 is 0
-mem/0: storing 0 in location 1161
-run/0: instruction buffer-append/5
-run/0: break-unless/12 {name: "full?", value: 3, type: 3, properties: ["full?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
-mem/0: location 1161 is 0
-run/0: ingredient 0 is 0
-run/0: ingredient 1 is 
-run/0: jumping to instruction 7
-run/0: instruction buffer-append/8
-run/0: {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer"]} <- get-address/25 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "length", value: 0, type: 0, properties: ["length": "offset"]}
-run/0: ingredient 0 is in
-mem/0: location 1159 is 1062
-run/0: ingredient 1 is length
-run/0: address to copy is 1062
-run/0: product 0 is 1062
-mem/0: storing 1062 in location 1162
-run/0: instruction buffer-append/9
-run/0: {name: "s", value: 5, type: 2-5-4, properties: ["s": "address":"array":"character"]} <- get/24 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is in
-mem/0: location 1159 is 1062
-run/0: ingredient 1 is data
-run/0: address to copy is 1063
-run/0: its type is 2
-mem/0: location 1063 is 1064
-run/0: product 0 is 1064
-mem/0: storing 1064 in location 1163
-run/0: instruction buffer-append/10
-run/0: {name: "dest", value: 6, type: 2-4, properties: ["dest": "address":"character"]} <- index-address/27 {name: "s", value: 5, type: 2-5-4, properties: ["s": "address":"array":"character", "deref": ]}, {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]}
-run/0: ingredient 0 is s
-mem/0: location 1163 is 1064
-run/0: ingredient 1 is {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]}
-mem/0: location 1162 is 1062
-mem/0: location 1062 is 1
-run/0: address to copy is 1066
-run/0: product 0 is 1066
-mem/0: storing 1066 in location 1164
-run/0: instruction buffer-append/11
-run/0: {name: "dest", value: 6, type: 2-4, properties: ["dest": "address":"character", "deref": ]} <- copy/1 {name: "c", value: 2, type: 4, properties: ["c": "character"]}
-run/0: ingredient 0 is c
-mem/0: location 1160 is 45
-mem/0: location 1164 is 1066
-mem/0: storing 45 in location 1066
-run/0: instruction buffer-append/12
-run/0: {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]} <- add/2 {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is len
-mem/0: location 1162 is 1062
-mem/0: location 1062 is 1
-run/0: ingredient 1 is 1
-run/0: product 0 is 2
-mem/0: location 1162 is 1062
-mem/0: storing 2 in location 1062
-run/0: instruction buffer-append/13
-run/0: reply/33 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "same-as-ingredient": "0"]}
-mem/0: location 1159 is 1062
-run/0: result 0 is 1062
-mem/0: storing 1062 in location 1006
-run/0: instruction integer-to-decimal-string/28
-run/0: {name: "len", value: 10, type: 1, properties: ["len": "integer"]} <- get/24 {name: "tmp", value: 5, type: 2-9, properties: ["tmp": "address":"buffer", "deref": ]}, {name: "length", value: 0, type: 0, properties: ["length": "offset"]}
-run/0: ingredient 0 is tmp
-mem/0: location 1006 is 1062
-run/0: ingredient 1 is length
-run/0: address to copy is 1062
-run/0: its type is 1
-mem/0: location 1062 is 2
-run/0: product 0 is 2
-mem/0: storing 2 in location 1011
-run/0: instruction integer-to-decimal-string/29
-run/0: {name: "buf", value: 11, type: 2-5-4, properties: ["buf": "address":"array":"character"]} <- get/24 {name: "tmp", value: 5, type: 2-9, properties: ["tmp": "address":"buffer", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is tmp
-mem/0: location 1006 is 1062
-run/0: ingredient 1 is data
-run/0: address to copy is 1063
-run/0: its type is 2
-mem/0: location 1063 is 1064
-run/0: product 0 is 1064
-mem/0: storing 1064 in location 1012
-run/0: instruction integer-to-decimal-string/30
-run/0: {name: "result", value: 2, type: 2-5-4, properties: ["result": "address":"array":"character"]} <- new/44 {name: "character", value: 4, type: 0, properties: ["character": "type"]}, {name: "len", value: 10, type: 1, properties: ["len": "integer"]}
-mem/0: location 1011 is 2
-mem/0: array size is 2
-mem/0: new alloc: 1219
-mem/0: storing 1219 in location 1003
-run/0: instruction integer-to-decimal-string/31
-run/0: {name: "i", value: 12, type: 1, properties: ["i": "integer"]} <- subtract/3 {name: "len", value: 10, type: 1, properties: ["len": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is len
-mem/0: location 1011 is 2
-run/0: ingredient 1 is 1
-run/0: product 0 is 1
-mem/0: storing 1 in location 1013
-run/0: instruction integer-to-decimal-string/32
-run/0: {name: "j", value: 13, type: 1, properties: ["j": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
-mem/0: storing 0 in location 1014
-run/0: instruction integer-to-decimal-string/34
-run/0: {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]} <- lesser-than/15 {name: "i", value: 12, type: 1, properties: ["i": "integer"]}, {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1013 is 1
-run/0: ingredient 1 is 0
-run/0: product 0 is 0
-mem/0: storing 0 in location 1008
-run/0: instruction integer-to-decimal-string/35
-run/0: break-if/11 {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
-mem/0: location 1008 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction integer-to-decimal-string/36
-run/0: {name: "src", value: 14, type: 4, properties: ["src": "character"]} <- index/26 {name: "buf", value: 11, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 12, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is {name: "buf", value: 11, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}
-mem/0: location 1012 is 1064
-run/0: ingredient 1 is {name: "i", value: 12, type: 1, properties: ["i": "integer"]}
-mem/0: location 1013 is 1
-run/0: address to copy is 1066
-run/0: its type is 4
-mem/0: location 1066 is 45
-run/0: product 0 is 45
-mem/0: storing 45 in location 1015
-run/0: instruction integer-to-decimal-string/37
-run/0: {name: "dest", value: 15, type: 2-4, properties: ["dest": "address":"character"]} <- index-address/27 {name: "result", value: 2, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "j", value: 13, type: 1, properties: ["j": "integer"]}
-run/0: ingredient 0 is result
-mem/0: location 1003 is 1219
-run/0: ingredient 1 is {name: "j", value: 13, type: 1, properties: ["j": "integer"]}
-mem/0: location 1014 is 0
-run/0: address to copy is 1220
-run/0: product 0 is 1220
-mem/0: storing 1220 in location 1016
-run/0: instruction integer-to-decimal-string/38
-run/0: {name: "dest", value: 15, type: 2-4, properties: ["dest": "address":"character", "deref": ]} <- copy/1 {name: "src", value: 14, type: 4, properties: ["src": "character"]}
-run/0: ingredient 0 is src
-mem/0: location 1015 is 45
-mem/0: location 1016 is 1220
-mem/0: storing 45 in location 1220
-run/0: instruction integer-to-decimal-string/39
-run/0: {name: "i", value: 12, type: 1, properties: ["i": "integer"]} <- subtract/3 {name: "i", value: 12, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1013 is 1
-run/0: ingredient 1 is 1
-run/0: product 0 is 0
-mem/0: storing 0 in location 1013
-run/0: instruction integer-to-decimal-string/40
-run/0: {name: "j", value: 13, type: 1, properties: ["j": "integer"]} <- add/2 {name: "j", value: 13, type: 1, properties: ["j": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is j
-mem/0: location 1014 is 0
-run/0: ingredient 1 is 1
-run/0: product 0 is 1
-mem/0: storing 1 in location 1014
-run/0: instruction integer-to-decimal-string/41
-run/0: loop/10 {name: "", value: -8, type: , properties: ["": ]}
-run/0: ingredient 0 is -8
-run/0: jumping to instruction 34
-run/0: instruction integer-to-decimal-string/34
-run/0: {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]} <- lesser-than/15 {name: "i", value: 12, type: 1, properties: ["i": "integer"]}, {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1013 is 0
-run/0: ingredient 1 is 0
-run/0: product 0 is 0
-mem/0: storing 0 in location 1008
-run/0: instruction integer-to-decimal-string/35
-run/0: break-if/11 {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
-mem/0: location 1008 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction integer-to-decimal-string/36
-run/0: {name: "src", value: 14, type: 4, properties: ["src": "character"]} <- index/26 {name: "buf", value: 11, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 12, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is {name: "buf", value: 11, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}
-mem/0: location 1012 is 1064
-run/0: ingredient 1 is {name: "i", value: 12, type: 1, properties: ["i": "integer"]}
-mem/0: location 1013 is 0
-run/0: address to copy is 1065
-run/0: its type is 4
-mem/0: location 1065 is 49
-run/0: product 0 is 49
-mem/0: storing 49 in location 1015
-run/0: instruction integer-to-decimal-string/37
-run/0: {name: "dest", value: 15, type: 2-4, properties: ["dest": "address":"character"]} <- index-address/27 {name: "result", value: 2, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "j", value: 13, type: 1, properties: ["j": "integer"]}
-run/0: ingredient 0 is result
-mem/0: location 1003 is 1219
-run/0: ingredient 1 is {name: "j", value: 13, type: 1, properties: ["j": "integer"]}
-mem/0: location 1014 is 1
-run/0: address to copy is 1221
-run/0: product 0 is 1221
-mem/0: storing 1221 in location 1016
-run/0: instruction integer-to-decimal-string/38
-run/0: {name: "dest", value: 15, type: 2-4, properties: ["dest": "address":"character", "deref": ]} <- copy/1 {name: "src", value: 14, type: 4, properties: ["src": "character"]}
-run/0: ingredient 0 is src
-mem/0: location 1015 is 49
-mem/0: location 1016 is 1221
-mem/0: storing 49 in location 1221
-run/0: instruction integer-to-decimal-string/39
-run/0: {name: "i", value: 12, type: 1, properties: ["i": "integer"]} <- subtract/3 {name: "i", value: 12, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1013 is 0
-run/0: ingredient 1 is 1
-run/0: product 0 is -1
-mem/0: storing -1 in location 1013
-run/0: instruction integer-to-decimal-string/40
-run/0: {name: "j", value: 13, type: 1, properties: ["j": "integer"]} <- add/2 {name: "j", value: 13, type: 1, properties: ["j": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is j
-mem/0: location 1014 is 1
-run/0: ingredient 1 is 1
-run/0: product 0 is 2
-mem/0: storing 2 in location 1014
-run/0: instruction integer-to-decimal-string/41
-run/0: loop/10 {name: "", value: -8, type: , properties: ["": ]}
-run/0: ingredient 0 is -8
-run/0: jumping to instruction 34
-run/0: instruction integer-to-decimal-string/34
-run/0: {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]} <- lesser-than/15 {name: "i", value: 12, type: 1, properties: ["i": "integer"]}, {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1013 is -1
-run/0: ingredient 1 is 0
-run/0: product 0 is 1
-mem/0: storing 1 in location 1008
-run/0: instruction integer-to-decimal-string/35
-run/0: break-if/11 {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
-mem/0: location 1008 is 1
-run/0: ingredient 0 is 1
-run/0: ingredient 1 is 
-run/0: jumping to instruction 42
-run/0: instruction integer-to-decimal-string/43
-run/0: reply/33 {name: "result", value: 2, type: 2-5-4, properties: ["result": "address":"array":"character"]}
-mem/0: location 1003 is 1219
-run/0: result 0 is 1219
-mem/0: storing 1219 in location 1
-run/0: instruction run1001/1
-run/0: {name: "2", value: 2, type: 5-4, properties: ["2": "array":"character", "raw": ]} <- copy/1 {name: "1", value: 1, type: 2-5-4, properties: ["1": "address":"array":"character", "deref": , "raw": ]}
-run/0: ingredient 0 is 1
-mem/0: location 1 is 1219
-mem/0: location 1219 is 2
-mem/0: location 1220 is 45
-mem/0: location 1221 is 49
-mem/0: storing 2 in location 2
-mem/0: storing 45 in location 3
-mem/0: storing 49 in location 4
-run/0: instruction integer-to-decimal-digit-negative/1
-run/0: memory-should-contain/46 {name: "
-    2 <- 2
-    3 <- 45  # '-'
-    4 <- 49  # '1'
-  ", value: 0, type: 0, properties: ["
-    2 <- 2
-    3 <- 45  # '-'
-    4 <- 49  # '1'
-  ": "literal-string"]}
-run/0: checking location 2
-run/0: checking location 3
-run/0: checking location 4
diff --git a/cpp/.traces/integer-to-decimal-digit-positive b/cpp/.traces/integer-to-decimal-digit-positive
deleted file mode 100644
index c722fcab..00000000
--- a/cpp/.traces/integer-to-decimal-digit-positive
+++ /dev/null
@@ -1,837 +0,0 @@
-parse/0: instruction: run
-parse/0:   ingredient: {name: "
-    1:address:array:character/raw <- integer-to-decimal-string 234:literal
-    2:array:character/raw <- copy 1:address:array:character/deref/raw
-  ", value: 0, type: 0, properties: ["
-    1:address:array:character/raw <- integer-to-decimal-string 234:literal
-    2:array:character/raw <- copy 1:address:array:character/deref/raw
-  ": "literal-string"]}
-parse/0: instruction: memory-should-contain
-parse/0:   ingredient: {name: "
-    2:string <- [234]
-  ", value: 0, type: 0, properties: ["
-    2:string <- [234]
-  ": "literal-string"]}
-after-brace/0: recipe integer-to-decimal-digit-positive
-after-brace/0: run ...
-after-brace/0: memory-should-contain ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: integer-to-decimal-digit-positive
-run/0: instruction integer-to-decimal-digit-positive/0
-run/0: run/45 {name: "
-    1:address:array:character/raw <- integer-to-decimal-string 234:literal
-    2:array:character/raw <- copy 1:address:array:character/deref/raw
-  ", value: 0, type: 0, properties: ["
-    1:address:array:character/raw <- integer-to-decimal-string 234:literal
-    2:array:character/raw <- copy 1:address:array:character/deref/raw
-  ": "literal-string"]}
-parse/0: instruction: integer-to-decimal-string
-parse/0:   ingredient: {name: "234", value: 0, type: 0, properties: ["234": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 2-5-4, properties: ["1": "address":"array":"character", "raw": ]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "1", value: 0, type: 2-5-4, properties: ["1": "address":"array":"character", "deref": , "raw": ]}
-parse/0:   product: {name: "2", value: 0, type: 5-4, properties: ["2": "array":"character", "raw": ]}
-after-brace/0: recipe run1001
-after-brace/0: integer-to-decimal-string ...
-after-brace/0: copy ...
-run/0: instruction run1001/0
-run/0: {name: "1", value: 1, type: 2-5-4, properties: ["1": "address":"array":"character", "raw": ]} <- integer-to-decimal-string/105 {name: "234", value: 234, type: 0, properties: ["234": "literal"]}
-run/0: instruction integer-to-decimal-string/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1000
-run/0: instruction integer-to-decimal-string/1
-run/0: {name: "n", value: 1, type: 1, properties: ["n": "integer"]} <- next-ingredient/30 
-run/0: product 0 is 234
-mem/0: storing 234 in location 1002
-run/0: instruction integer-to-decimal-string/3
-run/0: break-if/11 {name: "n", value: 1, type: 1, properties: ["n": "integer"]}, {name: "", value: 2, type: , properties: ["": ]}
-mem/0: location 1002 is 234
-run/0: ingredient 0 is 234
-run/0: ingredient 1 is 
-run/0: jumping to instruction 6
-run/0: instruction integer-to-decimal-string/7
-run/0: {name: "negate-result", value: 3, type: 3, properties: ["negate-result": "boolean"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
-mem/0: storing 0 in location 1004
-run/0: instruction integer-to-decimal-string/9
-run/0: {name: "negative?", value: 4, type: 3, properties: ["negative?": "boolean"]} <- lesser-than/15 {name: "n", value: 1, type: 1, properties: ["n": "integer"]}, {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is n
-mem/0: location 1002 is 234
-run/0: ingredient 1 is 0
-run/0: product 0 is 0
-mem/0: storing 0 in location 1005
-run/0: instruction integer-to-decimal-string/10
-run/0: break-unless/12 {name: "negative?", value: 4, type: 3, properties: ["negative?": "boolean"]}, {name: "", value: 2, type: , properties: ["": ]}
-mem/0: location 1005 is 0
-run/0: ingredient 0 is 0
-run/0: ingredient 1 is 
-run/0: jumping to instruction 13
-run/0: instruction integer-to-decimal-string/14
-run/0: {name: "tmp", value: 5, type: 2-9, properties: ["tmp": "address":"buffer"]} <- init-buffer/101 {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-run/0: instruction init-buffer/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1031
-run/0: instruction init-buffer/1
-run/0: {name: "result", value: 1, type: 2-9, properties: ["result": "address":"buffer"]} <- new/44 {name: "buffer", value: 9, type: 0, properties: ["buffer": "type"]}
-mem/0: new alloc: 1062
-mem/0: storing 1062 in location 1033
-run/0: instruction init-buffer/2
-run/0: {name: "len", value: 2, type: 2-1, properties: ["len": "address":"integer"]} <- get-address/25 {name: "result", value: 1, type: 2-9, properties: ["result": "address":"buffer", "deref": ]}, {name: "length", value: 0, type: 0, properties: ["length": "offset"]}
-run/0: ingredient 0 is result
-mem/0: location 1033 is 1062
-run/0: ingredient 1 is length
-run/0: address to copy is 1062
-run/0: product 0 is 1062
-mem/0: storing 1062 in location 1034
-run/0: instruction init-buffer/3
-run/0: {name: "len", value: 2, type: 2-1, properties: ["len": "address":"integer", "deref": ]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
-mem/0: location 1034 is 1062
-mem/0: storing 0 in location 1062
-run/0: instruction init-buffer/4
-run/0: {name: "s", value: 3, type: 2-2-5-4, properties: ["s": "address":"address":"array":"character"]} <- get-address/25 {name: "result", value: 1, type: 2-9, properties: ["result": "address":"buffer", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is result
-mem/0: location 1033 is 1062
-run/0: ingredient 1 is data
-run/0: address to copy is 1063
-run/0: product 0 is 1063
-mem/0: storing 1063 in location 1035
-run/0: instruction init-buffer/5
-run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- next-ingredient/30 
-run/0: product 0 is 30
-mem/0: storing 30 in location 1036
-run/0: instruction init-buffer/6
-run/0: {name: "s", value: 3, type: 2-2-5-4, properties: ["s": "address":"address":"array":"character", "deref": ]} <- new/44 {name: "character", value: 4, type: 0, properties: ["character": "type"]}, {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}
-mem/0: location 1036 is 30
-mem/0: array size is 30
-mem/0: new alloc: 1064
-mem/0: location 1035 is 1063
-mem/0: storing 1064 in location 1063
-run/0: instruction init-buffer/7
-run/0: reply/33 {name: "result", value: 1, type: 2-9, properties: ["result": "address":"buffer"]}
-mem/0: location 1033 is 1062
-run/0: result 0 is 1062
-mem/0: storing 1062 in location 1006
-run/0: instruction integer-to-decimal-string/15
-run/0: {name: "digit-base", value: 6, type: 1, properties: ["digit-base": "integer"]} <- copy/1 {name: "48", value: 48, type: 0, properties: ["48": "literal"]}
-run/0: ingredient 0 is 48
-mem/0: storing 48 in location 1007
-run/0: instruction integer-to-decimal-string/17
-run/0: {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]} <- equal/13 {name: "n", value: 1, type: 1, properties: ["n": "integer"]}, {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is n
-mem/0: location 1002 is 234
-run/0: ingredient 1 is 0
-run/0: product 0 is 0
-mem/0: storing 0 in location 1008
-run/0: instruction integer-to-decimal-string/18
-run/0: break-if/11 {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
-mem/0: location 1008 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction integer-to-decimal-string/19
-run/0: {name: "n", value: 1, type: 1, properties: ["n": "integer"]}, {name: "digit", value: 8, type: 1, properties: ["digit": "integer"]} <- divide-with-remainder/6 {name: "n", value: 1, type: 1, properties: ["n": "integer"]}, {name: "10", value: 10, type: 0, properties: ["10": "literal"]}
-run/0: ingredient 0 is n
-mem/0: location 1002 is 234
-run/0: ingredient 1 is 10
-run/0: product 0 is 23
-mem/0: storing 23 in location 1002
-run/0: product 1 is 4
-mem/0: storing 4 in location 1009
-run/0: instruction integer-to-decimal-string/20
-run/0: {name: "c", value: 9, type: 4, properties: ["c": "character"]} <- add/2 {name: "digit-base", value: 6, type: 1, properties: ["digit-base": "integer"]}, {name: "digit", value: 8, type: 1, properties: ["digit": "integer"]}
-run/0: ingredient 0 is digit-base
-mem/0: location 1007 is 48
-run/0: ingredient 1 is digit
-mem/0: location 1009 is 4
-run/0: product 0 is 52
-mem/0: storing 52 in location 1010
-run/0: instruction integer-to-decimal-string/21
-run/0: {name: "tmp", value: 5, type: 2-9, properties: ["tmp": "address":"buffer"]} <- buffer-append/104 {name: "tmp", value: 5, type: 2-9, properties: ["tmp": "address":"buffer"]}, {name: "c", value: 9, type: 4, properties: ["c": "character"]}
-mem/0: location 1006 is 1062
-mem/0: location 1010 is 52
-run/0: instruction buffer-append/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1095
-run/0: instruction buffer-append/1
-run/0: {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]} <- next-ingredient/30 
-run/0: product 0 is 1062
-mem/0: storing 1062 in location 1097
-run/0: instruction buffer-append/2
-run/0: {name: "c", value: 2, type: 4, properties: ["c": "character"]} <- next-ingredient/30 
-run/0: product 0 is 52
-mem/0: storing 52 in location 1098
-run/0: instruction buffer-append/4
-run/0: {name: "full?", value: 3, type: 3, properties: ["full?": "boolean"]} <- buffer-full?/103 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]}
-mem/0: location 1097 is 1062
-run/0: instruction buffer-full?/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1126
-run/0: instruction buffer-full?/1
-run/0: {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]} <- next-ingredient/30 
-run/0: product 0 is 1062
-mem/0: storing 1062 in location 1128
-run/0: instruction buffer-full?/2
-run/0: {name: "len", value: 2, type: 1, properties: ["len": "integer"]} <- get/24 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "length", value: 0, type: 0, properties: ["length": "offset"]}
-run/0: ingredient 0 is in
-mem/0: location 1128 is 1062
-run/0: ingredient 1 is length
-run/0: address to copy is 1062
-run/0: its type is 1
-mem/0: location 1062 is 0
-run/0: product 0 is 0
-mem/0: storing 0 in location 1129
-run/0: instruction buffer-full?/3
-run/0: {name: "s", value: 3, type: 2-5-4, properties: ["s": "address":"array":"character"]} <- get/24 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is in
-mem/0: location 1128 is 1062
-run/0: ingredient 1 is data
-run/0: address to copy is 1063
-run/0: its type is 2
-mem/0: location 1063 is 1064
-run/0: product 0 is 1064
-mem/0: storing 1064 in location 1130
-run/0: instruction buffer-full?/4
-run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- length/28 {name: "s", value: 3, type: 2-5-4, properties: ["s": "address":"array":"character", "deref": ]}
-mem/0: location 1130 is 1064
-mem/0: storing 30 in location 1131
-run/0: instruction buffer-full?/5
-run/0: {name: "result", value: 5, type: 3, properties: ["result": "boolean"]} <- greater-or-equal/16 {name: "len", value: 2, type: 1, properties: ["len": "integer"]}, {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}
-run/0: ingredient 0 is len
-mem/0: location 1129 is 0
-run/0: ingredient 1 is capacity
-mem/0: location 1131 is 30
-run/0: product 0 is 0
-mem/0: storing 0 in location 1132
-run/0: instruction buffer-full?/6
-run/0: reply/33 {name: "result", value: 5, type: 3, properties: ["result": "boolean"]}
-mem/0: location 1132 is 0
-run/0: result 0 is 0
-mem/0: storing 0 in location 1099
-run/0: instruction buffer-append/5
-run/0: break-unless/12 {name: "full?", value: 3, type: 3, properties: ["full?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
-mem/0: location 1099 is 0
-run/0: ingredient 0 is 0
-run/0: ingredient 1 is 
-run/0: jumping to instruction 7
-run/0: instruction buffer-append/8
-run/0: {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer"]} <- get-address/25 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "length", value: 0, type: 0, properties: ["length": "offset"]}
-run/0: ingredient 0 is in
-mem/0: location 1097 is 1062
-run/0: ingredient 1 is length
-run/0: address to copy is 1062
-run/0: product 0 is 1062
-mem/0: storing 1062 in location 1100
-run/0: instruction buffer-append/9
-run/0: {name: "s", value: 5, type: 2-5-4, properties: ["s": "address":"array":"character"]} <- get/24 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is in
-mem/0: location 1097 is 1062
-run/0: ingredient 1 is data
-run/0: address to copy is 1063
-run/0: its type is 2
-mem/0: location 1063 is 1064
-run/0: product 0 is 1064
-mem/0: storing 1064 in location 1101
-run/0: instruction buffer-append/10
-run/0: {name: "dest", value: 6, type: 2-4, properties: ["dest": "address":"character"]} <- index-address/27 {name: "s", value: 5, type: 2-5-4, properties: ["s": "address":"array":"character", "deref": ]}, {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]}
-run/0: ingredient 0 is s
-mem/0: location 1101 is 1064
-run/0: ingredient 1 is {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]}
-mem/0: location 1100 is 1062
-mem/0: location 1062 is 0
-run/0: address to copy is 1065
-run/0: product 0 is 1065
-mem/0: storing 1065 in location 1102
-run/0: instruction buffer-append/11
-run/0: {name: "dest", value: 6, type: 2-4, properties: ["dest": "address":"character", "deref": ]} <- copy/1 {name: "c", value: 2, type: 4, properties: ["c": "character"]}
-run/0: ingredient 0 is c
-mem/0: location 1098 is 52
-mem/0: location 1102 is 1065
-mem/0: storing 52 in location 1065
-run/0: instruction buffer-append/12
-run/0: {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]} <- add/2 {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is len
-mem/0: location 1100 is 1062
-mem/0: location 1062 is 0
-run/0: ingredient 1 is 1
-run/0: product 0 is 1
-mem/0: location 1100 is 1062
-mem/0: storing 1 in location 1062
-run/0: instruction buffer-append/13
-run/0: reply/33 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "same-as-ingredient": "0"]}
-mem/0: location 1097 is 1062
-run/0: result 0 is 1062
-mem/0: storing 1062 in location 1006
-run/0: instruction integer-to-decimal-string/22
-run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
-run/0: ingredient 0 is -6
-run/0: jumping to instruction 17
-run/0: instruction integer-to-decimal-string/17
-run/0: {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]} <- equal/13 {name: "n", value: 1, type: 1, properties: ["n": "integer"]}, {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is n
-mem/0: location 1002 is 23
-run/0: ingredient 1 is 0
-run/0: product 0 is 0
-mem/0: storing 0 in location 1008
-run/0: instruction integer-to-decimal-string/18
-run/0: break-if/11 {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
-mem/0: location 1008 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction integer-to-decimal-string/19
-run/0: {name: "n", value: 1, type: 1, properties: ["n": "integer"]}, {name: "digit", value: 8, type: 1, properties: ["digit": "integer"]} <- divide-with-remainder/6 {name: "n", value: 1, type: 1, properties: ["n": "integer"]}, {name: "10", value: 10, type: 0, properties: ["10": "literal"]}
-run/0: ingredient 0 is n
-mem/0: location 1002 is 23
-run/0: ingredient 1 is 10
-run/0: product 0 is 2
-mem/0: storing 2 in location 1002
-run/0: product 1 is 3
-mem/0: storing 3 in location 1009
-run/0: instruction integer-to-decimal-string/20
-run/0: {name: "c", value: 9, type: 4, properties: ["c": "character"]} <- add/2 {name: "digit-base", value: 6, type: 1, properties: ["digit-base": "integer"]}, {name: "digit", value: 8, type: 1, properties: ["digit": "integer"]}
-run/0: ingredient 0 is digit-base
-mem/0: location 1007 is 48
-run/0: ingredient 1 is digit
-mem/0: location 1009 is 3
-run/0: product 0 is 51
-mem/0: storing 51 in location 1010
-run/0: instruction integer-to-decimal-string/21
-run/0: {name: "tmp", value: 5, type: 2-9, properties: ["tmp": "address":"buffer"]} <- buffer-append/104 {name: "tmp", value: 5, type: 2-9, properties: ["tmp": "address":"buffer"]}, {name: "c", value: 9, type: 4, properties: ["c": "character"]}
-mem/0: location 1006 is 1062
-mem/0: location 1010 is 51
-run/0: instruction buffer-append/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1157
-run/0: instruction buffer-append/1
-run/0: {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]} <- next-ingredient/30 
-run/0: product 0 is 1062
-mem/0: storing 1062 in location 1159
-run/0: instruction buffer-append/2
-run/0: {name: "c", value: 2, type: 4, properties: ["c": "character"]} <- next-ingredient/30 
-run/0: product 0 is 51
-mem/0: storing 51 in location 1160
-run/0: instruction buffer-append/4
-run/0: {name: "full?", value: 3, type: 3, properties: ["full?": "boolean"]} <- buffer-full?/103 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]}
-mem/0: location 1159 is 1062
-run/0: instruction buffer-full?/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1188
-run/0: instruction buffer-full?/1
-run/0: {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]} <- next-ingredient/30 
-run/0: product 0 is 1062
-mem/0: storing 1062 in location 1190
-run/0: instruction buffer-full?/2
-run/0: {name: "len", value: 2, type: 1, properties: ["len": "integer"]} <- get/24 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "length", value: 0, type: 0, properties: ["length": "offset"]}
-run/0: ingredient 0 is in
-mem/0: location 1190 is 1062
-run/0: ingredient 1 is length
-run/0: address to copy is 1062
-run/0: its type is 1
-mem/0: location 1062 is 1
-run/0: product 0 is 1
-mem/0: storing 1 in location 1191
-run/0: instruction buffer-full?/3
-run/0: {name: "s", value: 3, type: 2-5-4, properties: ["s": "address":"array":"character"]} <- get/24 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is in
-mem/0: location 1190 is 1062
-run/0: ingredient 1 is data
-run/0: address to copy is 1063
-run/0: its type is 2
-mem/0: location 1063 is 1064
-run/0: product 0 is 1064
-mem/0: storing 1064 in location 1192
-run/0: instruction buffer-full?/4
-run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- length/28 {name: "s", value: 3, type: 2-5-4, properties: ["s": "address":"array":"character", "deref": ]}
-mem/0: location 1192 is 1064
-mem/0: storing 30 in location 1193
-run/0: instruction buffer-full?/5
-run/0: {name: "result", value: 5, type: 3, properties: ["result": "boolean"]} <- greater-or-equal/16 {name: "len", value: 2, type: 1, properties: ["len": "integer"]}, {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}
-run/0: ingredient 0 is len
-mem/0: location 1191 is 1
-run/0: ingredient 1 is capacity
-mem/0: location 1193 is 30
-run/0: product 0 is 0
-mem/0: storing 0 in location 1194
-run/0: instruction buffer-full?/6
-run/0: reply/33 {name: "result", value: 5, type: 3, properties: ["result": "boolean"]}
-mem/0: location 1194 is 0
-run/0: result 0 is 0
-mem/0: storing 0 in location 1161
-run/0: instruction buffer-append/5
-run/0: break-unless/12 {name: "full?", value: 3, type: 3, properties: ["full?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
-mem/0: location 1161 is 0
-run/0: ingredient 0 is 0
-run/0: ingredient 1 is 
-run/0: jumping to instruction 7
-run/0: instruction buffer-append/8
-run/0: {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer"]} <- get-address/25 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "length", value: 0, type: 0, properties: ["length": "offset"]}
-run/0: ingredient 0 is in
-mem/0: location 1159 is 1062
-run/0: ingredient 1 is length
-run/0: address to copy is 1062
-run/0: product 0 is 1062
-mem/0: storing 1062 in location 1162
-run/0: instruction buffer-append/9
-run/0: {name: "s", value: 5, type: 2-5-4, properties: ["s": "address":"array":"character"]} <- get/24 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is in
-mem/0: location 1159 is 1062
-run/0: ingredient 1 is data
-run/0: address to copy is 1063
-run/0: its type is 2
-mem/0: location 1063 is 1064
-run/0: product 0 is 1064
-mem/0: storing 1064 in location 1163
-run/0: instruction buffer-append/10
-run/0: {name: "dest", value: 6, type: 2-4, properties: ["dest": "address":"character"]} <- index-address/27 {name: "s", value: 5, type: 2-5-4, properties: ["s": "address":"array":"character", "deref": ]}, {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]}
-run/0: ingredient 0 is s
-mem/0: location 1163 is 1064
-run/0: ingredient 1 is {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]}
-mem/0: location 1162 is 1062
-mem/0: location 1062 is 1
-run/0: address to copy is 1066
-run/0: product 0 is 1066
-mem/0: storing 1066 in location 1164
-run/0: instruction buffer-append/11
-run/0: {name: "dest", value: 6, type: 2-4, properties: ["dest": "address":"character", "deref": ]} <- copy/1 {name: "c", value: 2, type: 4, properties: ["c": "character"]}
-run/0: ingredient 0 is c
-mem/0: location 1160 is 51
-mem/0: location 1164 is 1066
-mem/0: storing 51 in location 1066
-run/0: instruction buffer-append/12
-run/0: {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]} <- add/2 {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is len
-mem/0: location 1162 is 1062
-mem/0: location 1062 is 1
-run/0: ingredient 1 is 1
-run/0: product 0 is 2
-mem/0: location 1162 is 1062
-mem/0: storing 2 in location 1062
-run/0: instruction buffer-append/13
-run/0: reply/33 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "same-as-ingredient": "0"]}
-mem/0: location 1159 is 1062
-run/0: result 0 is 1062
-mem/0: storing 1062 in location 1006
-run/0: instruction integer-to-decimal-string/22
-run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
-run/0: ingredient 0 is -6
-run/0: jumping to instruction 17
-run/0: instruction integer-to-decimal-string/17
-run/0: {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]} <- equal/13 {name: "n", value: 1, type: 1, properties: ["n": "integer"]}, {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is n
-mem/0: location 1002 is 2
-run/0: ingredient 1 is 0
-run/0: product 0 is 0
-mem/0: storing 0 in location 1008
-run/0: instruction integer-to-decimal-string/18
-run/0: break-if/11 {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
-mem/0: location 1008 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction integer-to-decimal-string/19
-run/0: {name: "n", value: 1, type: 1, properties: ["n": "integer"]}, {name: "digit", value: 8, type: 1, properties: ["digit": "integer"]} <- divide-with-remainder/6 {name: "n", value: 1, type: 1, properties: ["n": "integer"]}, {name: "10", value: 10, type: 0, properties: ["10": "literal"]}
-run/0: ingredient 0 is n
-mem/0: location 1002 is 2
-run/0: ingredient 1 is 10
-run/0: product 0 is 0
-mem/0: storing 0 in location 1002
-run/0: product 1 is 2
-mem/0: storing 2 in location 1009
-run/0: instruction integer-to-decimal-string/20
-run/0: {name: "c", value: 9, type: 4, properties: ["c": "character"]} <- add/2 {name: "digit-base", value: 6, type: 1, properties: ["digit-base": "integer"]}, {name: "digit", value: 8, type: 1, properties: ["digit": "integer"]}
-run/0: ingredient 0 is digit-base
-mem/0: location 1007 is 48
-run/0: ingredient 1 is digit
-mem/0: location 1009 is 2
-run/0: product 0 is 50
-mem/0: storing 50 in location 1010
-run/0: instruction integer-to-decimal-string/21
-run/0: {name: "tmp", value: 5, type: 2-9, properties: ["tmp": "address":"buffer"]} <- buffer-append/104 {name: "tmp", value: 5, type: 2-9, properties: ["tmp": "address":"buffer"]}, {name: "c", value: 9, type: 4, properties: ["c": "character"]}
-mem/0: location 1006 is 1062
-mem/0: location 1010 is 50
-run/0: instruction buffer-append/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1219
-run/0: instruction buffer-append/1
-run/0: {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]} <- next-ingredient/30 
-run/0: product 0 is 1062
-mem/0: storing 1062 in location 1221
-run/0: instruction buffer-append/2
-run/0: {name: "c", value: 2, type: 4, properties: ["c": "character"]} <- next-ingredient/30 
-run/0: product 0 is 50
-mem/0: storing 50 in location 1222
-run/0: instruction buffer-append/4
-run/0: {name: "full?", value: 3, type: 3, properties: ["full?": "boolean"]} <- buffer-full?/103 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]}
-mem/0: location 1221 is 1062
-run/0: instruction buffer-full?/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1250
-run/0: instruction buffer-full?/1
-run/0: {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]} <- next-ingredient/30 
-run/0: product 0 is 1062
-mem/0: storing 1062 in location 1252
-run/0: instruction buffer-full?/2
-run/0: {name: "len", value: 2, type: 1, properties: ["len": "integer"]} <- get/24 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "length", value: 0, type: 0, properties: ["length": "offset"]}
-run/0: ingredient 0 is in
-mem/0: location 1252 is 1062
-run/0: ingredient 1 is length
-run/0: address to copy is 1062
-run/0: its type is 1
-mem/0: location 1062 is 2
-run/0: product 0 is 2
-mem/0: storing 2 in location 1253
-run/0: instruction buffer-full?/3
-run/0: {name: "s", value: 3, type: 2-5-4, properties: ["s": "address":"array":"character"]} <- get/24 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is in
-mem/0: location 1252 is 1062
-run/0: ingredient 1 is data
-run/0: address to copy is 1063
-run/0: its type is 2
-mem/0: location 1063 is 1064
-run/0: product 0 is 1064
-mem/0: storing 1064 in location 1254
-run/0: instruction buffer-full?/4
-run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- length/28 {name: "s", value: 3, type: 2-5-4, properties: ["s": "address":"array":"character", "deref": ]}
-mem/0: location 1254 is 1064
-mem/0: storing 30 in location 1255
-run/0: instruction buffer-full?/5
-run/0: {name: "result", value: 5, type: 3, properties: ["result": "boolean"]} <- greater-or-equal/16 {name: "len", value: 2, type: 1, properties: ["len": "integer"]}, {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}
-run/0: ingredient 0 is len
-mem/0: location 1253 is 2
-run/0: ingredient 1 is capacity
-mem/0: location 1255 is 30
-run/0: product 0 is 0
-mem/0: storing 0 in location 1256
-run/0: instruction buffer-full?/6
-run/0: reply/33 {name: "result", value: 5, type: 3, properties: ["result": "boolean"]}
-mem/0: location 1256 is 0
-run/0: result 0 is 0
-mem/0: storing 0 in location 1223
-run/0: instruction buffer-append/5
-run/0: break-unless/12 {name: "full?", value: 3, type: 3, properties: ["full?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
-mem/0: location 1223 is 0
-run/0: ingredient 0 is 0
-run/0: ingredient 1 is 
-run/0: jumping to instruction 7
-run/0: instruction buffer-append/8
-run/0: {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer"]} <- get-address/25 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "length", value: 0, type: 0, properties: ["length": "offset"]}
-run/0: ingredient 0 is in
-mem/0: location 1221 is 1062
-run/0: ingredient 1 is length
-run/0: address to copy is 1062
-run/0: product 0 is 1062
-mem/0: storing 1062 in location 1224
-run/0: instruction buffer-append/9
-run/0: {name: "s", value: 5, type: 2-5-4, properties: ["s": "address":"array":"character"]} <- get/24 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is in
-mem/0: location 1221 is 1062
-run/0: ingredient 1 is data
-run/0: address to copy is 1063
-run/0: its type is 2
-mem/0: location 1063 is 1064
-run/0: product 0 is 1064
-mem/0: storing 1064 in location 1225
-run/0: instruction buffer-append/10
-run/0: {name: "dest", value: 6, type: 2-4, properties: ["dest": "address":"character"]} <- index-address/27 {name: "s", value: 5, type: 2-5-4, properties: ["s": "address":"array":"character", "deref": ]}, {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]}
-run/0: ingredient 0 is s
-mem/0: location 1225 is 1064
-run/0: ingredient 1 is {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]}
-mem/0: location 1224 is 1062
-mem/0: location 1062 is 2
-run/0: address to copy is 1067
-run/0: product 0 is 1067
-mem/0: storing 1067 in location 1226
-run/0: instruction buffer-append/11
-run/0: {name: "dest", value: 6, type: 2-4, properties: ["dest": "address":"character", "deref": ]} <- copy/1 {name: "c", value: 2, type: 4, properties: ["c": "character"]}
-run/0: ingredient 0 is c
-mem/0: location 1222 is 50
-mem/0: location 1226 is 1067
-mem/0: storing 50 in location 1067
-run/0: instruction buffer-append/12
-run/0: {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]} <- add/2 {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is len
-mem/0: location 1224 is 1062
-mem/0: location 1062 is 2
-run/0: ingredient 1 is 1
-run/0: product 0 is 3
-mem/0: location 1224 is 1062
-mem/0: storing 3 in location 1062
-run/0: instruction buffer-append/13
-run/0: reply/33 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "same-as-ingredient": "0"]}
-mem/0: location 1221 is 1062
-run/0: result 0 is 1062
-mem/0: storing 1062 in location 1006
-run/0: instruction integer-to-decimal-string/22
-run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
-run/0: ingredient 0 is -6
-run/0: jumping to instruction 17
-run/0: instruction integer-to-decimal-string/17
-run/0: {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]} <- equal/13 {name: "n", value: 1, type: 1, properties: ["n": "integer"]}, {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is n
-mem/0: location 1002 is 0
-run/0: ingredient 1 is 0
-run/0: product 0 is 1
-mem/0: storing 1 in location 1008
-run/0: instruction integer-to-decimal-string/18
-run/0: break-if/11 {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
-mem/0: location 1008 is 1
-run/0: ingredient 0 is 1
-run/0: ingredient 1 is 
-run/0: jumping to instruction 23
-run/0: instruction integer-to-decimal-string/25
-run/0: break-unless/12 {name: "negate-result", value: 3, type: 3, properties: ["negate-result": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
-mem/0: location 1004 is 0
-run/0: ingredient 0 is 0
-run/0: ingredient 1 is 
-run/0: jumping to instruction 27
-run/0: instruction integer-to-decimal-string/28
-run/0: {name: "len", value: 10, type: 1, properties: ["len": "integer"]} <- get/24 {name: "tmp", value: 5, type: 2-9, properties: ["tmp": "address":"buffer", "deref": ]}, {name: "length", value: 0, type: 0, properties: ["length": "offset"]}
-run/0: ingredient 0 is tmp
-mem/0: location 1006 is 1062
-run/0: ingredient 1 is length
-run/0: address to copy is 1062
-run/0: its type is 1
-mem/0: location 1062 is 3
-run/0: product 0 is 3
-mem/0: storing 3 in location 1011
-run/0: instruction integer-to-decimal-string/29
-run/0: {name: "buf", value: 11, type: 2-5-4, properties: ["buf": "address":"array":"character"]} <- get/24 {name: "tmp", value: 5, type: 2-9, properties: ["tmp": "address":"buffer", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is tmp
-mem/0: location 1006 is 1062
-run/0: ingredient 1 is data
-run/0: address to copy is 1063
-run/0: its type is 2
-mem/0: location 1063 is 1064
-run/0: product 0 is 1064
-mem/0: storing 1064 in location 1012
-run/0: instruction integer-to-decimal-string/30
-run/0: {name: "result", value: 2, type: 2-5-4, properties: ["result": "address":"array":"character"]} <- new/44 {name: "character", value: 4, type: 0, properties: ["character": "type"]}, {name: "len", value: 10, type: 1, properties: ["len": "integer"]}
-mem/0: location 1011 is 3
-mem/0: array size is 3
-mem/0: new alloc: 1281
-mem/0: storing 1281 in location 1003
-run/0: instruction integer-to-decimal-string/31
-run/0: {name: "i", value: 12, type: 1, properties: ["i": "integer"]} <- subtract/3 {name: "len", value: 10, type: 1, properties: ["len": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is len
-mem/0: location 1011 is 3
-run/0: ingredient 1 is 1
-run/0: product 0 is 2
-mem/0: storing 2 in location 1013
-run/0: instruction integer-to-decimal-string/32
-run/0: {name: "j", value: 13, type: 1, properties: ["j": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
-mem/0: storing 0 in location 1014
-run/0: instruction integer-to-decimal-string/34
-run/0: {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]} <- lesser-than/15 {name: "i", value: 12, type: 1, properties: ["i": "integer"]}, {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1013 is 2
-run/0: ingredient 1 is 0
-run/0: product 0 is 0
-mem/0: storing 0 in location 1008
-run/0: instruction integer-to-decimal-string/35
-run/0: break-if/11 {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
-mem/0: location 1008 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction integer-to-decimal-string/36
-run/0: {name: "src", value: 14, type: 4, properties: ["src": "character"]} <- index/26 {name: "buf", value: 11, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 12, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is {name: "buf", value: 11, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}
-mem/0: location 1012 is 1064
-run/0: ingredient 1 is {name: "i", value: 12, type: 1, properties: ["i": "integer"]}
-mem/0: location 1013 is 2
-run/0: address to copy is 1067
-run/0: its type is 4
-mem/0: location 1067 is 50
-run/0: product 0 is 50
-mem/0: storing 50 in location 1015
-run/0: instruction integer-to-decimal-string/37
-run/0: {name: "dest", value: 15, type: 2-4, properties: ["dest": "address":"character"]} <- index-address/27 {name: "result", value: 2, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "j", value: 13, type: 1, properties: ["j": "integer"]}
-run/0: ingredient 0 is result
-mem/0: location 1003 is 1281
-run/0: ingredient 1 is {name: "j", value: 13, type: 1, properties: ["j": "integer"]}
-mem/0: location 1014 is 0
-run/0: address to copy is 1282
-run/0: product 0 is 1282
-mem/0: storing 1282 in location 1016
-run/0: instruction integer-to-decimal-string/38
-run/0: {name: "dest", value: 15, type: 2-4, properties: ["dest": "address":"character", "deref": ]} <- copy/1 {name: "src", value: 14, type: 4, properties: ["src": "character"]}
-run/0: ingredient 0 is src
-mem/0: location 1015 is 50
-mem/0: location 1016 is 1282
-mem/0: storing 50 in location 1282
-run/0: instruction integer-to-decimal-string/39
-run/0: {name: "i", value: 12, type: 1, properties: ["i": "integer"]} <- subtract/3 {name: "i", value: 12, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1013 is 2
-run/0: ingredient 1 is 1
-run/0: product 0 is 1
-mem/0: storing 1 in location 1013
-run/0: instruction integer-to-decimal-string/40
-run/0: {name: "j", value: 13, type: 1, properties: ["j": "integer"]} <- add/2 {name: "j", value: 13, type: 1, properties: ["j": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is j
-mem/0: location 1014 is 0
-run/0: ingredient 1 is 1
-run/0: product 0 is 1
-mem/0: storing 1 in location 1014
-run/0: instruction integer-to-decimal-string/41
-run/0: loop/10 {name: "", value: -8, type: , properties: ["": ]}
-run/0: ingredient 0 is -8
-run/0: jumping to instruction 34
-run/0: instruction integer-to-decimal-string/34
-run/0: {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]} <- lesser-than/15 {name: "i", value: 12, type: 1, properties: ["i": "integer"]}, {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1013 is 1
-run/0: ingredient 1 is 0
-run/0: product 0 is 0
-mem/0: storing 0 in location 1008
-run/0: instruction integer-to-decimal-string/35
-run/0: break-if/11 {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
-mem/0: location 1008 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction integer-to-decimal-string/36
-run/0: {name: "src", value: 14, type: 4, properties: ["src": "character"]} <- index/26 {name: "buf", value: 11, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 12, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is {name: "buf", value: 11, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}
-mem/0: location 1012 is 1064
-run/0: ingredient 1 is {name: "i", value: 12, type: 1, properties: ["i": "integer"]}
-mem/0: location 1013 is 1
-run/0: address to copy is 1066
-run/0: its type is 4
-mem/0: location 1066 is 51
-run/0: product 0 is 51
-mem/0: storing 51 in location 1015
-run/0: instruction integer-to-decimal-string/37
-run/0: {name: "dest", value: 15, type: 2-4, properties: ["dest": "address":"character"]} <- index-address/27 {name: "result", value: 2, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "j", value: 13, type: 1, properties: ["j": "integer"]}
-run/0: ingredient 0 is result
-mem/0: location 1003 is 1281
-run/0: ingredient 1 is {name: "j", value: 13, type: 1, properties: ["j": "integer"]}
-mem/0: location 1014 is 1
-run/0: address to copy is 1283
-run/0: product 0 is 1283
-mem/0: storing 1283 in location 1016
-run/0: instruction integer-to-decimal-string/38
-run/0: {name: "dest", value: 15, type: 2-4, properties: ["dest": "address":"character", "deref": ]} <- copy/1 {name: "src", value: 14, type: 4, properties: ["src": "character"]}
-run/0: ingredient 0 is src
-mem/0: location 1015 is 51
-mem/0: location 1016 is 1283
-mem/0: storing 51 in location 1283
-run/0: instruction integer-to-decimal-string/39
-run/0: {name: "i", value: 12, type: 1, properties: ["i": "integer"]} <- subtract/3 {name: "i", value: 12, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1013 is 1
-run/0: ingredient 1 is 1
-run/0: product 0 is 0
-mem/0: storing 0 in location 1013
-run/0: instruction integer-to-decimal-string/40
-run/0: {name: "j", value: 13, type: 1, properties: ["j": "integer"]} <- add/2 {name: "j", value: 13, type: 1, properties: ["j": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is j
-mem/0: location 1014 is 1
-run/0: ingredient 1 is 1
-run/0: product 0 is 2
-mem/0: storing 2 in location 1014
-run/0: instruction integer-to-decimal-string/41
-run/0: loop/10 {name: "", value: -8, type: , properties: ["": ]}
-run/0: ingredient 0 is -8
-run/0: jumping to instruction 34
-run/0: instruction integer-to-decimal-string/34
-run/0: {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]} <- lesser-than/15 {name: "i", value: 12, type: 1, properties: ["i": "integer"]}, {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1013 is 0
-run/0: ingredient 1 is 0
-run/0: product 0 is 0
-mem/0: storing 0 in location 1008
-run/0: instruction integer-to-decimal-string/35
-run/0: break-if/11 {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
-mem/0: location 1008 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction integer-to-decimal-string/36
-run/0: {name: "src", value: 14, type: 4, properties: ["src": "character"]} <- index/26 {name: "buf", value: 11, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 12, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is {name: "buf", value: 11, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}
-mem/0: location 1012 is 1064
-run/0: ingredient 1 is {name: "i", value: 12, type: 1, properties: ["i": "integer"]}
-mem/0: location 1013 is 0
-run/0: address to copy is 1065
-run/0: its type is 4
-mem/0: location 1065 is 52
-run/0: product 0 is 52
-mem/0: storing 52 in location 1015
-run/0: instruction integer-to-decimal-string/37
-run/0: {name: "dest", value: 15, type: 2-4, properties: ["dest": "address":"character"]} <- index-address/27 {name: "result", value: 2, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "j", value: 13, type: 1, properties: ["j": "integer"]}
-run/0: ingredient 0 is result
-mem/0: location 1003 is 1281
-run/0: ingredient 1 is {name: "j", value: 13, type: 1, properties: ["j": "integer"]}
-mem/0: location 1014 is 2
-run/0: address to copy is 1284
-run/0: product 0 is 1284
-mem/0: storing 1284 in location 1016
-run/0: instruction integer-to-decimal-string/38
-run/0: {name: "dest", value: 15, type: 2-4, properties: ["dest": "address":"character", "deref": ]} <- copy/1 {name: "src", value: 14, type: 4, properties: ["src": "character"]}
-run/0: ingredient 0 is src
-mem/0: location 1015 is 52
-mem/0: location 1016 is 1284
-mem/0: storing 52 in location 1284
-run/0: instruction integer-to-decimal-string/39
-run/0: {name: "i", value: 12, type: 1, properties: ["i": "integer"]} <- subtract/3 {name: "i", value: 12, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1013 is 0
-run/0: ingredient 1 is 1
-run/0: product 0 is -1
-mem/0: storing -1 in location 1013
-run/0: instruction integer-to-decimal-string/40
-run/0: {name: "j", value: 13, type: 1, properties: ["j": "integer"]} <- add/2 {name: "j", value: 13, type: 1, properties: ["j": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is j
-mem/0: location 1014 is 2
-run/0: ingredient 1 is 1
-run/0: product 0 is 3
-mem/0: storing 3 in location 1014
-run/0: instruction integer-to-decimal-string/41
-run/0: loop/10 {name: "", value: -8, type: , properties: ["": ]}
-run/0: ingredient 0 is -8
-run/0: jumping to instruction 34
-run/0: instruction integer-to-decimal-string/34
-run/0: {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]} <- lesser-than/15 {name: "i", value: 12, type: 1, properties: ["i": "integer"]}, {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1013 is -1
-run/0: ingredient 1 is 0
-run/0: product 0 is 1
-mem/0: storing 1 in location 1008
-run/0: instruction integer-to-decimal-string/35
-run/0: break-if/11 {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
-mem/0: location 1008 is 1
-run/0: ingredient 0 is 1
-run/0: ingredient 1 is 
-run/0: jumping to instruction 42
-run/0: instruction integer-to-decimal-string/43
-run/0: reply/33 {name: "result", value: 2, type: 2-5-4, properties: ["result": "address":"array":"character"]}
-mem/0: location 1003 is 1281
-run/0: result 0 is 1281
-mem/0: storing 1281 in location 1
-run/0: instruction run1001/1
-run/0: {name: "2", value: 2, type: 5-4, properties: ["2": "array":"character", "raw": ]} <- copy/1 {name: "1", value: 1, type: 2-5-4, properties: ["1": "address":"array":"character", "deref": , "raw": ]}
-run/0: ingredient 0 is 1
-mem/0: location 1 is 1281
-mem/0: location 1281 is 3
-mem/0: location 1282 is 50
-mem/0: location 1283 is 51
-mem/0: location 1284 is 52
-mem/0: storing 3 in location 2
-mem/0: storing 50 in location 3
-mem/0: storing 51 in location 4
-mem/0: storing 52 in location 5
-run/0: instruction integer-to-decimal-digit-positive/1
-run/0: memory-should-contain/46 {name: "
-    2:string <- [234]
-  ", value: 0, type: 0, properties: ["
-    2:string <- [234]
-  ": "literal-string"]}
-run/0: checking string length at 2
-run/0: checking location 3
-run/0: checking location 4
-run/0: checking location 5
diff --git a/cpp/.traces/integer-to-decimal-digit-zero b/cpp/.traces/integer-to-decimal-digit-zero
deleted file mode 100644
index 85cb42d4..00000000
--- a/cpp/.traces/integer-to-decimal-digit-zero
+++ /dev/null
@@ -1,75 +0,0 @@
-parse/0: instruction: run
-parse/0:   ingredient: {name: "
-    1:address:array:character/raw <- integer-to-decimal-string 0:literal
-    2:array:character/raw <- copy 1:address:array:character/deref/raw
-  ", value: 0, type: 0, properties: ["
-    1:address:array:character/raw <- integer-to-decimal-string 0:literal
-    2:array:character/raw <- copy 1:address:array:character/deref/raw
-  ": "literal-string"]}
-parse/0: instruction: memory-should-contain
-parse/0:   ingredient: {name: "
-    2:string <- [0]
-  ", value: 0, type: 0, properties: ["
-    2:string <- [0]
-  ": "literal-string"]}
-after-brace/0: recipe integer-to-decimal-digit-zero
-after-brace/0: run ...
-after-brace/0: memory-should-contain ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: integer-to-decimal-digit-zero
-run/0: instruction integer-to-decimal-digit-zero/0
-run/0: run/45 {name: "
-    1:address:array:character/raw <- integer-to-decimal-string 0:literal
-    2:array:character/raw <- copy 1:address:array:character/deref/raw
-  ", value: 0, type: 0, properties: ["
-    1:address:array:character/raw <- integer-to-decimal-string 0:literal
-    2:array:character/raw <- copy 1:address:array:character/deref/raw
-  ": "literal-string"]}
-parse/0: instruction: integer-to-decimal-string
-parse/0:   ingredient: {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 2-5-4, properties: ["1": "address":"array":"character", "raw": ]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "1", value: 0, type: 2-5-4, properties: ["1": "address":"array":"character", "deref": , "raw": ]}
-parse/0:   product: {name: "2", value: 0, type: 5-4, properties: ["2": "array":"character", "raw": ]}
-after-brace/0: recipe run1001
-after-brace/0: integer-to-decimal-string ...
-after-brace/0: copy ...
-run/0: instruction run1001/0
-run/0: {name: "1", value: 1, type: 2-5-4, properties: ["1": "address":"array":"character", "raw": ]} <- integer-to-decimal-string/105 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: instruction integer-to-decimal-string/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1000
-run/0: instruction integer-to-decimal-string/1
-run/0: {name: "n", value: 1, type: 1, properties: ["n": "integer"]} <- next-ingredient/30 
-run/0: product 0 is 0
-mem/0: storing 0 in location 1002
-run/0: instruction integer-to-decimal-string/3
-run/0: break-if/11 {name: "n", value: 1, type: 1, properties: ["n": "integer"]}, {name: "", value: 2, type: , properties: ["": ]}
-mem/0: location 1002 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction integer-to-decimal-string/4
-run/0: {name: "result", value: 2, type: 2-5-4, properties: ["result": "address":"array":"character"]} <- new/44 {name: "0", value: 0, type: 0, properties: ["0": "literal-string"]}
-mem/0: storing 1031 in location 1003
-run/0: instruction integer-to-decimal-string/5
-run/0: reply/33 {name: "result", value: 2, type: 2-5-4, properties: ["result": "address":"array":"character"]}
-mem/0: location 1003 is 1031
-run/0: result 0 is 1031
-mem/0: storing 1031 in location 1
-run/0: instruction run1001/1
-run/0: {name: "2", value: 2, type: 5-4, properties: ["2": "array":"character", "raw": ]} <- copy/1 {name: "1", value: 1, type: 2-5-4, properties: ["1": "address":"array":"character", "deref": , "raw": ]}
-run/0: ingredient 0 is 1
-mem/0: location 1 is 1031
-mem/0: location 1031 is 1
-mem/0: location 1032 is 48
-mem/0: storing 1 in location 2
-mem/0: storing 48 in location 3
-run/0: instruction integer-to-decimal-digit-zero/1
-run/0: memory-should-contain/46 {name: "
-    2:string <- [0]
-  ", value: 0, type: 0, properties: ["
-    2:string <- [0]
-  ": "literal-string"]}
-run/0: checking string length at 2
-run/0: checking location 3
diff --git a/cpp/.traces/interpolate-at-end b/cpp/.traces/interpolate-at-end
deleted file mode 100644
index 6d411983..00000000
--- a/cpp/.traces/interpolate-at-end
+++ /dev/null
@@ -1,944 +0,0 @@
-parse/0: instruction: run
-parse/0:   ingredient: {name: "
-    1:address:array:character/raw <- new [hello, _]
-    2:address:array:character/raw <- new [abc]
-    3:address:array:character/raw <- interpolate 1:address:array:character/raw, 2:address:array:character/raw
-    4:array:character/raw <- copy 3:address:array:character/raw/deref
-  ", value: 0, type: 0, properties: ["
-    1:address:array:character/raw <- new [hello, _]
-    2:address:array:character/raw <- new [abc]
-    3:address:array:character/raw <- interpolate 1:address:array:character/raw, 2:address:array:character/raw
-    4:array:character/raw <- copy 3:address:array:character/raw/deref
-  ": "literal-string"]}
-parse/0: instruction: memory-should-contain
-parse/0:   ingredient: {name: "
-    4:string <- [hello, abc]
-  ", value: 0, type: 0, properties: ["
-    4:string <- [hello, abc]
-  ": "literal-string"]}
-after-brace/0: recipe interpolate-at-end
-after-brace/0: run ...
-after-brace/0: memory-should-contain ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: interpolate-at-end
-run/0: instruction interpolate-at-end/0
-run/0: run/45 {name: "
-    1:address:array:character/raw <- new [hello, _]
-    2:address:array:character/raw <- new [abc]
-    3:address:array:character/raw <- interpolate 1:address:array:character/raw, 2:address:array:character/raw
-    4:array:character/raw <- copy 3:address:array:character/raw/deref
-  ", value: 0, type: 0, properties: ["
-    1:address:array:character/raw <- new [hello, _]
-    2:address:array:character/raw <- new [abc]
-    3:address:array:character/raw <- interpolate 1:address:array:character/raw, 2:address:array:character/raw
-    4:array:character/raw <- copy 3:address:array:character/raw/deref
-  ": "literal-string"]}
-parse/0: instruction: new
-parse/0:   ingredient: {name: "hello, _", value: 0, type: 0, properties: ["hello, _": "literal-string"]}
-parse/0:   product: {name: "1", value: 0, type: 2-5-4, properties: ["1": "address":"array":"character", "raw": ]}
-parse/0: instruction: new
-parse/0:   ingredient: {name: "abc", value: 0, type: 0, properties: ["abc": "literal-string"]}
-parse/0:   product: {name: "2", value: 0, type: 2-5-4, properties: ["2": "address":"array":"character", "raw": ]}
-parse/0: instruction: interpolate
-parse/0:   ingredient: {name: "1", value: 0, type: 2-5-4, properties: ["1": "address":"array":"character", "raw": ]}
-parse/0:   ingredient: {name: "2", value: 0, type: 2-5-4, properties: ["2": "address":"array":"character", "raw": ]}
-parse/0:   product: {name: "3", value: 0, type: 2-5-4, properties: ["3": "address":"array":"character", "raw": ]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "3", value: 0, type: 2-5-4, properties: ["3": "address":"array":"character", "raw": , "deref": ]}
-parse/0:   product: {name: "4", value: 0, type: 5-4, properties: ["4": "array":"character", "raw": ]}
-new/0: hello, _ -> 0
-new/0: abc -> 0
-after-brace/0: recipe run1001
-after-brace/0: new ...
-after-brace/0: new ...
-after-brace/0: interpolate ...
-after-brace/0: copy ...
-run/0: instruction run1001/0
-run/0: {name: "1", value: 1, type: 2-5-4, properties: ["1": "address":"array":"character", "raw": ]} <- new/44 {name: "hello, _", value: 0, type: 0, properties: ["hello, _": "literal-string"]}
-mem/0: storing 1000 in location 1
-run/0: instruction run1001/1
-run/0: {name: "2", value: 2, type: 2-5-4, properties: ["2": "address":"array":"character", "raw": ]} <- new/44 {name: "abc", value: 0, type: 0, properties: ["abc": "literal-string"]}
-mem/0: storing 1009 in location 2
-run/0: instruction run1001/2
-run/0: {name: "3", value: 3, type: 2-5-4, properties: ["3": "address":"array":"character", "raw": ]} <- interpolate/107 {name: "1", value: 1, type: 2-5-4, properties: ["1": "address":"array":"character", "raw": ]}, {name: "2", value: 2, type: 2-5-4, properties: ["2": "address":"array":"character", "raw": ]}
-mem/0: location 1 is 1000
-mem/0: location 2 is 1009
-run/0: instruction interpolate/0
-run/0: {name: "default-space", value: 0, type: 5-2-1, properties: ["default-space": "array":"address":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "60", value: 60, type: 0, properties: ["60": "literal"]}
-mem/0: array size is 60
-mem/0: new alloc: 1013
-run/0: instruction interpolate/1
-run/0: {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character"]} <- next-ingredient/30 
-run/0: product 0 is 1000
-mem/0: storing 1000 in location 1015
-run/0: instruction interpolate/2
-run/0: {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]} <- length/28 {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}
-mem/0: location 1015 is 1000
-mem/0: storing 8 in location 1016
-run/0: instruction interpolate/3
-run/0: {name: "result-len", value: 3, type: 1, properties: ["result-len": "integer"]} <- copy/1 {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]}
-run/0: ingredient 0 is tem-len
-mem/0: location 1016 is 8
-mem/0: storing 8 in location 1017
-run/0: instruction interpolate/5
-run/0: {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character"]}, {name: "arg-received?", value: 5, type: 3, properties: ["arg-received?": "boolean"]} <- next-ingredient/30 
-run/0: product 0 is 1009
-mem/0: storing 1009 in location 1018
-mem/0: storing 1 in location 1019
-run/0: instruction interpolate/6
-run/0: break-unless/12 {name: "arg-received?", value: 5, type: 3, properties: ["arg-received?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
-mem/0: location 1019 is 1
-run/0: ingredient 0 is 1
-run/0: jump-unless fell through
-run/0: instruction interpolate/7
-run/0: {name: "a-len", value: 6, type: 1, properties: ["a-len": "integer"]} <- length/28 {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}
-mem/0: location 1018 is 1009
-mem/0: storing 3 in location 1020
-run/0: instruction interpolate/8
-run/0: {name: "result-len", value: 3, type: 1, properties: ["result-len": "integer"]} <- add/2 {name: "result-len", value: 3, type: 1, properties: ["result-len": "integer"]}, {name: "a-len", value: 6, type: 1, properties: ["a-len": "integer"]}
-run/0: ingredient 0 is result-len
-mem/0: location 1017 is 8
-run/0: ingredient 1 is a-len
-mem/0: location 1020 is 3
-run/0: product 0 is 11
-mem/0: storing 11 in location 1017
-run/0: instruction interpolate/9
-run/0: {name: "result-len", value: 3, type: 1, properties: ["result-len": "integer"]} <- subtract/3 {name: "result-len", value: 3, type: 1, properties: ["result-len": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is result-len
-mem/0: location 1017 is 11
-run/0: ingredient 1 is 1
-run/0: product 0 is 10
-mem/0: storing 10 in location 1017
-run/0: instruction interpolate/10
-run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
-run/0: ingredient 0 is -6
-run/0: jumping to instruction 5
-run/0: instruction interpolate/5
-run/0: {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character"]}, {name: "arg-received?", value: 5, type: 3, properties: ["arg-received?": "boolean"]} <- next-ingredient/30 
-mem/0: storing 0 in location 1019
-run/0: instruction interpolate/6
-run/0: break-unless/12 {name: "arg-received?", value: 5, type: 3, properties: ["arg-received?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
-mem/0: location 1019 is 0
-run/0: ingredient 0 is 0
-run/0: ingredient 1 is 
-run/0: jumping to instruction 11
-run/0: instruction interpolate/12
-run/0: rewind-ingredients/31 
-run/0: instruction interpolate/13
-run/0: {name: "_", value: 0, type: 0, properties: ["_": "dummy"]} <- next-ingredient/30 
-run/0: product 0 is 1000
-run/0: instruction interpolate/14
-run/0: {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character"]} <- new/44 {name: "character", value: 4, type: 0, properties: ["character": "type"]}, {name: "result-len", value: 3, type: 1, properties: ["result-len": "integer"]}
-mem/0: location 1017 is 10
-mem/0: array size is 10
-mem/0: new alloc: 1074
-mem/0: storing 1074 in location 1021
-run/0: instruction interpolate/15
-run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
-mem/0: storing 0 in location 1022
-run/0: instruction interpolate/16
-run/0: {name: "i", value: 9, type: 1, properties: ["i": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
-mem/0: storing 0 in location 1023
-run/0: instruction interpolate/18
-run/0: {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character"]}, {name: "arg-received?", value: 5, type: 3, properties: ["arg-received?": "boolean"]} <- next-ingredient/30 
-run/0: product 0 is 1009
-mem/0: storing 1009 in location 1018
-mem/0: storing 1 in location 1019
-run/0: instruction interpolate/19
-run/0: break-unless/12 {name: "arg-received?", value: 5, type: 3, properties: ["arg-received?": "boolean"]}, {name: "", value: 25, type: , properties: ["": ]}
-mem/0: location 1019 is 1
-run/0: ingredient 0 is 1
-run/0: jump-unless fell through
-run/0: instruction interpolate/21
-run/0: {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1023 is 0
-run/0: ingredient 1 is tem-len
-mem/0: location 1016 is 8
-run/0: product 0 is 0
-mem/0: storing 0 in location 1024
-run/0: instruction interpolate/22
-run/0: break-if/11 {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]}, {name: "2", value: 2, type: 0, properties: ["2": "blocks"]}
-mem/0: location 1024 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction interpolate/23
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/26 {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}, {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}
-mem/0: location 1015 is 1000
-run/0: ingredient 1 is {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
-mem/0: location 1023 is 0
-run/0: address to copy is 1001
-run/0: its type is 4
-mem/0: location 1001 is 104
-run/0: product 0 is 104
-mem/0: storing 104 in location 1025
-run/0: instruction interpolate/24
-run/0: {name: "underscore?", value: 12, type: 3, properties: ["underscore?": "boolean"]} <- equal/13 {name: "in", value: 11, type: 4, properties: ["in": "character"]}, {name: "95", value: 95, type: 0, properties: ["95": "literal"]}
-run/0: ingredient 0 is in
-mem/0: location 1025 is 104
-run/0: ingredient 1 is 95
-run/0: product 0 is 0
-mem/0: storing 0 in location 1026
-run/0: instruction interpolate/25
-run/0: break-if/11 {name: "underscore?", value: 12, type: 3, properties: ["underscore?": "boolean"]}, {name: "", value: 5, type: , properties: ["": ]}
-mem/0: location 1026 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction interpolate/26
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character"]} <- index-address/27 {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
-run/0: ingredient 0 is result
-mem/0: location 1021 is 1074
-run/0: ingredient 1 is {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
-mem/0: location 1022 is 0
-run/0: address to copy is 1075
-run/0: product 0 is 1075
-mem/0: storing 1075 in location 1027
-run/0: instruction interpolate/27
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy/1 {name: "in", value: 11, type: 4, properties: ["in": "character"]}
-run/0: ingredient 0 is in
-mem/0: location 1025 is 104
-mem/0: location 1027 is 1075
-mem/0: storing 104 in location 1075
-run/0: instruction interpolate/28
-run/0: {name: "i", value: 9, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1023 is 0
-run/0: ingredient 1 is 1
-run/0: product 0 is 1
-mem/0: storing 1 in location 1023
-run/0: instruction interpolate/29
-run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- add/2 {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is result-idx
-mem/0: location 1022 is 0
-run/0: ingredient 1 is 1
-run/0: product 0 is 1
-mem/0: storing 1 in location 1022
-run/0: instruction interpolate/30
-run/0: loop/10 {name: "", value: -10, type: , properties: ["": ]}
-run/0: ingredient 0 is -10
-run/0: jumping to instruction 21
-run/0: instruction interpolate/21
-run/0: {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1023 is 1
-run/0: ingredient 1 is tem-len
-mem/0: location 1016 is 8
-run/0: product 0 is 0
-mem/0: storing 0 in location 1024
-run/0: instruction interpolate/22
-run/0: break-if/11 {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]}, {name: "2", value: 2, type: 0, properties: ["2": "blocks"]}
-mem/0: location 1024 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction interpolate/23
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/26 {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}, {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}
-mem/0: location 1015 is 1000
-run/0: ingredient 1 is {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
-mem/0: location 1023 is 1
-run/0: address to copy is 1002
-run/0: its type is 4
-mem/0: location 1002 is 101
-run/0: product 0 is 101
-mem/0: storing 101 in location 1025
-run/0: instruction interpolate/24
-run/0: {name: "underscore?", value: 12, type: 3, properties: ["underscore?": "boolean"]} <- equal/13 {name: "in", value: 11, type: 4, properties: ["in": "character"]}, {name: "95", value: 95, type: 0, properties: ["95": "literal"]}
-run/0: ingredient 0 is in
-mem/0: location 1025 is 101
-run/0: ingredient 1 is 95
-run/0: product 0 is 0
-mem/0: storing 0 in location 1026
-run/0: instruction interpolate/25
-run/0: break-if/11 {name: "underscore?", value: 12, type: 3, properties: ["underscore?": "boolean"]}, {name: "", value: 5, type: , properties: ["": ]}
-mem/0: location 1026 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction interpolate/26
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character"]} <- index-address/27 {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
-run/0: ingredient 0 is result
-mem/0: location 1021 is 1074
-run/0: ingredient 1 is {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
-mem/0: location 1022 is 1
-run/0: address to copy is 1076
-run/0: product 0 is 1076
-mem/0: storing 1076 in location 1027
-run/0: instruction interpolate/27
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy/1 {name: "in", value: 11, type: 4, properties: ["in": "character"]}
-run/0: ingredient 0 is in
-mem/0: location 1025 is 101
-mem/0: location 1027 is 1076
-mem/0: storing 101 in location 1076
-run/0: instruction interpolate/28
-run/0: {name: "i", value: 9, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1023 is 1
-run/0: ingredient 1 is 1
-run/0: product 0 is 2
-mem/0: storing 2 in location 1023
-run/0: instruction interpolate/29
-run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- add/2 {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is result-idx
-mem/0: location 1022 is 1
-run/0: ingredient 1 is 1
-run/0: product 0 is 2
-mem/0: storing 2 in location 1022
-run/0: instruction interpolate/30
-run/0: loop/10 {name: "", value: -10, type: , properties: ["": ]}
-run/0: ingredient 0 is -10
-run/0: jumping to instruction 21
-run/0: instruction interpolate/21
-run/0: {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1023 is 2
-run/0: ingredient 1 is tem-len
-mem/0: location 1016 is 8
-run/0: product 0 is 0
-mem/0: storing 0 in location 1024
-run/0: instruction interpolate/22
-run/0: break-if/11 {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]}, {name: "2", value: 2, type: 0, properties: ["2": "blocks"]}
-mem/0: location 1024 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction interpolate/23
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/26 {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}, {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}
-mem/0: location 1015 is 1000
-run/0: ingredient 1 is {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
-mem/0: location 1023 is 2
-run/0: address to copy is 1003
-run/0: its type is 4
-mem/0: location 1003 is 108
-run/0: product 0 is 108
-mem/0: storing 108 in location 1025
-run/0: instruction interpolate/24
-run/0: {name: "underscore?", value: 12, type: 3, properties: ["underscore?": "boolean"]} <- equal/13 {name: "in", value: 11, type: 4, properties: ["in": "character"]}, {name: "95", value: 95, type: 0, properties: ["95": "literal"]}
-run/0: ingredient 0 is in
-mem/0: location 1025 is 108
-run/0: ingredient 1 is 95
-run/0: product 0 is 0
-mem/0: storing 0 in location 1026
-run/0: instruction interpolate/25
-run/0: break-if/11 {name: "underscore?", value: 12, type: 3, properties: ["underscore?": "boolean"]}, {name: "", value: 5, type: , properties: ["": ]}
-mem/0: location 1026 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction interpolate/26
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character"]} <- index-address/27 {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
-run/0: ingredient 0 is result
-mem/0: location 1021 is 1074
-run/0: ingredient 1 is {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
-mem/0: location 1022 is 2
-run/0: address to copy is 1077
-run/0: product 0 is 1077
-mem/0: storing 1077 in location 1027
-run/0: instruction interpolate/27
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy/1 {name: "in", value: 11, type: 4, properties: ["in": "character"]}
-run/0: ingredient 0 is in
-mem/0: location 1025 is 108
-mem/0: location 1027 is 1077
-mem/0: storing 108 in location 1077
-run/0: instruction interpolate/28
-run/0: {name: "i", value: 9, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1023 is 2
-run/0: ingredient 1 is 1
-run/0: product 0 is 3
-mem/0: storing 3 in location 1023
-run/0: instruction interpolate/29
-run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- add/2 {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is result-idx
-mem/0: location 1022 is 2
-run/0: ingredient 1 is 1
-run/0: product 0 is 3
-mem/0: storing 3 in location 1022
-run/0: instruction interpolate/30
-run/0: loop/10 {name: "", value: -10, type: , properties: ["": ]}
-run/0: ingredient 0 is -10
-run/0: jumping to instruction 21
-run/0: instruction interpolate/21
-run/0: {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1023 is 3
-run/0: ingredient 1 is tem-len
-mem/0: location 1016 is 8
-run/0: product 0 is 0
-mem/0: storing 0 in location 1024
-run/0: instruction interpolate/22
-run/0: break-if/11 {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]}, {name: "2", value: 2, type: 0, properties: ["2": "blocks"]}
-mem/0: location 1024 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction interpolate/23
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/26 {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}, {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}
-mem/0: location 1015 is 1000
-run/0: ingredient 1 is {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
-mem/0: location 1023 is 3
-run/0: address to copy is 1004
-run/0: its type is 4
-mem/0: location 1004 is 108
-run/0: product 0 is 108
-mem/0: storing 108 in location 1025
-run/0: instruction interpolate/24
-run/0: {name: "underscore?", value: 12, type: 3, properties: ["underscore?": "boolean"]} <- equal/13 {name: "in", value: 11, type: 4, properties: ["in": "character"]}, {name: "95", value: 95, type: 0, properties: ["95": "literal"]}
-run/0: ingredient 0 is in
-mem/0: location 1025 is 108
-run/0: ingredient 1 is 95
-run/0: product 0 is 0
-mem/0: storing 0 in location 1026
-run/0: instruction interpolate/25
-run/0: break-if/11 {name: "underscore?", value: 12, type: 3, properties: ["underscore?": "boolean"]}, {name: "", value: 5, type: , properties: ["": ]}
-mem/0: location 1026 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction interpolate/26
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character"]} <- index-address/27 {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
-run/0: ingredient 0 is result
-mem/0: location 1021 is 1074
-run/0: ingredient 1 is {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
-mem/0: location 1022 is 3
-run/0: address to copy is 1078
-run/0: product 0 is 1078
-mem/0: storing 1078 in location 1027
-run/0: instruction interpolate/27
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy/1 {name: "in", value: 11, type: 4, properties: ["in": "character"]}
-run/0: ingredient 0 is in
-mem/0: location 1025 is 108
-mem/0: location 1027 is 1078
-mem/0: storing 108 in location 1078
-run/0: instruction interpolate/28
-run/0: {name: "i", value: 9, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1023 is 3
-run/0: ingredient 1 is 1
-run/0: product 0 is 4
-mem/0: storing 4 in location 1023
-run/0: instruction interpolate/29
-run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- add/2 {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is result-idx
-mem/0: location 1022 is 3
-run/0: ingredient 1 is 1
-run/0: product 0 is 4
-mem/0: storing 4 in location 1022
-run/0: instruction interpolate/30
-run/0: loop/10 {name: "", value: -10, type: , properties: ["": ]}
-run/0: ingredient 0 is -10
-run/0: jumping to instruction 21
-run/0: instruction interpolate/21
-run/0: {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1023 is 4
-run/0: ingredient 1 is tem-len
-mem/0: location 1016 is 8
-run/0: product 0 is 0
-mem/0: storing 0 in location 1024
-run/0: instruction interpolate/22
-run/0: break-if/11 {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]}, {name: "2", value: 2, type: 0, properties: ["2": "blocks"]}
-mem/0: location 1024 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction interpolate/23
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/26 {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}, {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}
-mem/0: location 1015 is 1000
-run/0: ingredient 1 is {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
-mem/0: location 1023 is 4
-run/0: address to copy is 1005
-run/0: its type is 4
-mem/0: location 1005 is 111
-run/0: product 0 is 111
-mem/0: storing 111 in location 1025
-run/0: instruction interpolate/24
-run/0: {name: "underscore?", value: 12, type: 3, properties: ["underscore?": "boolean"]} <- equal/13 {name: "in", value: 11, type: 4, properties: ["in": "character"]}, {name: "95", value: 95, type: 0, properties: ["95": "literal"]}
-run/0: ingredient 0 is in
-mem/0: location 1025 is 111
-run/0: ingredient 1 is 95
-run/0: product 0 is 0
-mem/0: storing 0 in location 1026
-run/0: instruction interpolate/25
-run/0: break-if/11 {name: "underscore?", value: 12, type: 3, properties: ["underscore?": "boolean"]}, {name: "", value: 5, type: , properties: ["": ]}
-mem/0: location 1026 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction interpolate/26
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character"]} <- index-address/27 {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
-run/0: ingredient 0 is result
-mem/0: location 1021 is 1074
-run/0: ingredient 1 is {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
-mem/0: location 1022 is 4
-run/0: address to copy is 1079
-run/0: product 0 is 1079
-mem/0: storing 1079 in location 1027
-run/0: instruction interpolate/27
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy/1 {name: "in", value: 11, type: 4, properties: ["in": "character"]}
-run/0: ingredient 0 is in
-mem/0: location 1025 is 111
-mem/0: location 1027 is 1079
-mem/0: storing 111 in location 1079
-run/0: instruction interpolate/28
-run/0: {name: "i", value: 9, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1023 is 4
-run/0: ingredient 1 is 1
-run/0: product 0 is 5
-mem/0: storing 5 in location 1023
-run/0: instruction interpolate/29
-run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- add/2 {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is result-idx
-mem/0: location 1022 is 4
-run/0: ingredient 1 is 1
-run/0: product 0 is 5
-mem/0: storing 5 in location 1022
-run/0: instruction interpolate/30
-run/0: loop/10 {name: "", value: -10, type: , properties: ["": ]}
-run/0: ingredient 0 is -10
-run/0: jumping to instruction 21
-run/0: instruction interpolate/21
-run/0: {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1023 is 5
-run/0: ingredient 1 is tem-len
-mem/0: location 1016 is 8
-run/0: product 0 is 0
-mem/0: storing 0 in location 1024
-run/0: instruction interpolate/22
-run/0: break-if/11 {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]}, {name: "2", value: 2, type: 0, properties: ["2": "blocks"]}
-mem/0: location 1024 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction interpolate/23
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/26 {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}, {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}
-mem/0: location 1015 is 1000
-run/0: ingredient 1 is {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
-mem/0: location 1023 is 5
-run/0: address to copy is 1006
-run/0: its type is 4
-mem/0: location 1006 is 44
-run/0: product 0 is 44
-mem/0: storing 44 in location 1025
-run/0: instruction interpolate/24
-run/0: {name: "underscore?", value: 12, type: 3, properties: ["underscore?": "boolean"]} <- equal/13 {name: "in", value: 11, type: 4, properties: ["in": "character"]}, {name: "95", value: 95, type: 0, properties: ["95": "literal"]}
-run/0: ingredient 0 is in
-mem/0: location 1025 is 44
-run/0: ingredient 1 is 95
-run/0: product 0 is 0
-mem/0: storing 0 in location 1026
-run/0: instruction interpolate/25
-run/0: break-if/11 {name: "underscore?", value: 12, type: 3, properties: ["underscore?": "boolean"]}, {name: "", value: 5, type: , properties: ["": ]}
-mem/0: location 1026 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction interpolate/26
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character"]} <- index-address/27 {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
-run/0: ingredient 0 is result
-mem/0: location 1021 is 1074
-run/0: ingredient 1 is {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
-mem/0: location 1022 is 5
-run/0: address to copy is 1080
-run/0: product 0 is 1080
-mem/0: storing 1080 in location 1027
-run/0: instruction interpolate/27
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy/1 {name: "in", value: 11, type: 4, properties: ["in": "character"]}
-run/0: ingredient 0 is in
-mem/0: location 1025 is 44
-mem/0: location 1027 is 1080
-mem/0: storing 44 in location 1080
-run/0: instruction interpolate/28
-run/0: {name: "i", value: 9, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1023 is 5
-run/0: ingredient 1 is 1
-run/0: product 0 is 6
-mem/0: storing 6 in location 1023
-run/0: instruction interpolate/29
-run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- add/2 {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is result-idx
-mem/0: location 1022 is 5
-run/0: ingredient 1 is 1
-run/0: product 0 is 6
-mem/0: storing 6 in location 1022
-run/0: instruction interpolate/30
-run/0: loop/10 {name: "", value: -10, type: , properties: ["": ]}
-run/0: ingredient 0 is -10
-run/0: jumping to instruction 21
-run/0: instruction interpolate/21
-run/0: {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1023 is 6
-run/0: ingredient 1 is tem-len
-mem/0: location 1016 is 8
-run/0: product 0 is 0
-mem/0: storing 0 in location 1024
-run/0: instruction interpolate/22
-run/0: break-if/11 {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]}, {name: "2", value: 2, type: 0, properties: ["2": "blocks"]}
-mem/0: location 1024 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction interpolate/23
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/26 {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}, {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}
-mem/0: location 1015 is 1000
-run/0: ingredient 1 is {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
-mem/0: location 1023 is 6
-run/0: address to copy is 1007
-run/0: its type is 4
-mem/0: location 1007 is 32
-run/0: product 0 is 32
-mem/0: storing 32 in location 1025
-run/0: instruction interpolate/24
-run/0: {name: "underscore?", value: 12, type: 3, properties: ["underscore?": "boolean"]} <- equal/13 {name: "in", value: 11, type: 4, properties: ["in": "character"]}, {name: "95", value: 95, type: 0, properties: ["95": "literal"]}
-run/0: ingredient 0 is in
-mem/0: location 1025 is 32
-run/0: ingredient 1 is 95
-run/0: product 0 is 0
-mem/0: storing 0 in location 1026
-run/0: instruction interpolate/25
-run/0: break-if/11 {name: "underscore?", value: 12, type: 3, properties: ["underscore?": "boolean"]}, {name: "", value: 5, type: , properties: ["": ]}
-mem/0: location 1026 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction interpolate/26
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character"]} <- index-address/27 {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
-run/0: ingredient 0 is result
-mem/0: location 1021 is 1074
-run/0: ingredient 1 is {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
-mem/0: location 1022 is 6
-run/0: address to copy is 1081
-run/0: product 0 is 1081
-mem/0: storing 1081 in location 1027
-run/0: instruction interpolate/27
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy/1 {name: "in", value: 11, type: 4, properties: ["in": "character"]}
-run/0: ingredient 0 is in
-mem/0: location 1025 is 32
-mem/0: location 1027 is 1081
-mem/0: storing 32 in location 1081
-run/0: instruction interpolate/28
-run/0: {name: "i", value: 9, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1023 is 6
-run/0: ingredient 1 is 1
-run/0: product 0 is 7
-mem/0: storing 7 in location 1023
-run/0: instruction interpolate/29
-run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- add/2 {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is result-idx
-mem/0: location 1022 is 6
-run/0: ingredient 1 is 1
-run/0: product 0 is 7
-mem/0: storing 7 in location 1022
-run/0: instruction interpolate/30
-run/0: loop/10 {name: "", value: -10, type: , properties: ["": ]}
-run/0: ingredient 0 is -10
-run/0: jumping to instruction 21
-run/0: instruction interpolate/21
-run/0: {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1023 is 7
-run/0: ingredient 1 is tem-len
-mem/0: location 1016 is 8
-run/0: product 0 is 0
-mem/0: storing 0 in location 1024
-run/0: instruction interpolate/22
-run/0: break-if/11 {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]}, {name: "2", value: 2, type: 0, properties: ["2": "blocks"]}
-mem/0: location 1024 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction interpolate/23
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/26 {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}, {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}
-mem/0: location 1015 is 1000
-run/0: ingredient 1 is {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
-mem/0: location 1023 is 7
-run/0: address to copy is 1008
-run/0: its type is 4
-mem/0: location 1008 is 95
-run/0: product 0 is 95
-mem/0: storing 95 in location 1025
-run/0: instruction interpolate/24
-run/0: {name: "underscore?", value: 12, type: 3, properties: ["underscore?": "boolean"]} <- equal/13 {name: "in", value: 11, type: 4, properties: ["in": "character"]}, {name: "95", value: 95, type: 0, properties: ["95": "literal"]}
-run/0: ingredient 0 is in
-mem/0: location 1025 is 95
-run/0: ingredient 1 is 95
-run/0: product 0 is 1
-mem/0: storing 1 in location 1026
-run/0: instruction interpolate/25
-run/0: break-if/11 {name: "underscore?", value: 12, type: 3, properties: ["underscore?": "boolean"]}, {name: "", value: 5, type: , properties: ["": ]}
-mem/0: location 1026 is 1
-run/0: ingredient 0 is 1
-run/0: ingredient 1 is 
-run/0: jumping to instruction 31
-run/0: instruction interpolate/32
-run/0: {name: "j", value: 14, type: 1, properties: ["j": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
-mem/0: storing 0 in location 1028
-run/0: instruction interpolate/34
-run/0: {name: "arg-done?", value: 15, type: 3, properties: ["arg-done?": "boolean"]} <- greater-or-equal/16 {name: "j", value: 14, type: 1, properties: ["j": "integer"]}, {name: "a-len", value: 6, type: 1, properties: ["a-len": "integer"]}
-run/0: ingredient 0 is j
-mem/0: location 1028 is 0
-run/0: ingredient 1 is a-len
-mem/0: location 1020 is 3
-run/0: product 0 is 0
-mem/0: storing 0 in location 1029
-run/0: instruction interpolate/35
-run/0: break-if/11 {name: "arg-done?", value: 15, type: 3, properties: ["arg-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
-mem/0: location 1029 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction interpolate/36
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/26 {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}, {name: "j", value: 14, type: 1, properties: ["j": "integer"]}
-run/0: ingredient 0 is {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}
-mem/0: location 1018 is 1009
-run/0: ingredient 1 is {name: "j", value: 14, type: 1, properties: ["j": "integer"]}
-mem/0: location 1028 is 0
-run/0: address to copy is 1010
-run/0: its type is 4
-mem/0: location 1010 is 97
-run/0: product 0 is 97
-mem/0: storing 97 in location 1025
-run/0: instruction interpolate/37
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character"]} <- index-address/27 {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
-run/0: ingredient 0 is result
-mem/0: location 1021 is 1074
-run/0: ingredient 1 is {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
-mem/0: location 1022 is 7
-run/0: address to copy is 1082
-run/0: product 0 is 1082
-mem/0: storing 1082 in location 1027
-run/0: instruction interpolate/38
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy/1 {name: "in", value: 11, type: 4, properties: ["in": "character"]}
-run/0: ingredient 0 is in
-mem/0: location 1025 is 97
-mem/0: location 1027 is 1082
-mem/0: storing 97 in location 1082
-run/0: instruction interpolate/39
-run/0: {name: "j", value: 14, type: 1, properties: ["j": "integer"]} <- add/2 {name: "j", value: 14, type: 1, properties: ["j": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is j
-mem/0: location 1028 is 0
-run/0: ingredient 1 is 1
-run/0: product 0 is 1
-mem/0: storing 1 in location 1028
-run/0: instruction interpolate/40
-run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- add/2 {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is result-idx
-mem/0: location 1022 is 7
-run/0: ingredient 1 is 1
-run/0: product 0 is 8
-mem/0: storing 8 in location 1022
-run/0: instruction interpolate/41
-run/0: loop/10 {name: "", value: -8, type: , properties: ["": ]}
-run/0: ingredient 0 is -8
-run/0: jumping to instruction 34
-run/0: instruction interpolate/34
-run/0: {name: "arg-done?", value: 15, type: 3, properties: ["arg-done?": "boolean"]} <- greater-or-equal/16 {name: "j", value: 14, type: 1, properties: ["j": "integer"]}, {name: "a-len", value: 6, type: 1, properties: ["a-len": "integer"]}
-run/0: ingredient 0 is j
-mem/0: location 1028 is 1
-run/0: ingredient 1 is a-len
-mem/0: location 1020 is 3
-run/0: product 0 is 0
-mem/0: storing 0 in location 1029
-run/0: instruction interpolate/35
-run/0: break-if/11 {name: "arg-done?", value: 15, type: 3, properties: ["arg-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
-mem/0: location 1029 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction interpolate/36
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/26 {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}, {name: "j", value: 14, type: 1, properties: ["j": "integer"]}
-run/0: ingredient 0 is {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}
-mem/0: location 1018 is 1009
-run/0: ingredient 1 is {name: "j", value: 14, type: 1, properties: ["j": "integer"]}
-mem/0: location 1028 is 1
-run/0: address to copy is 1011
-run/0: its type is 4
-mem/0: location 1011 is 98
-run/0: product 0 is 98
-mem/0: storing 98 in location 1025
-run/0: instruction interpolate/37
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character"]} <- index-address/27 {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
-run/0: ingredient 0 is result
-mem/0: location 1021 is 1074
-run/0: ingredient 1 is {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
-mem/0: location 1022 is 8
-run/0: address to copy is 1083
-run/0: product 0 is 1083
-mem/0: storing 1083 in location 1027
-run/0: instruction interpolate/38
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy/1 {name: "in", value: 11, type: 4, properties: ["in": "character"]}
-run/0: ingredient 0 is in
-mem/0: location 1025 is 98
-mem/0: location 1027 is 1083
-mem/0: storing 98 in location 1083
-run/0: instruction interpolate/39
-run/0: {name: "j", value: 14, type: 1, properties: ["j": "integer"]} <- add/2 {name: "j", value: 14, type: 1, properties: ["j": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is j
-mem/0: location 1028 is 1
-run/0: ingredient 1 is 1
-run/0: product 0 is 2
-mem/0: storing 2 in location 1028
-run/0: instruction interpolate/40
-run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- add/2 {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is result-idx
-mem/0: location 1022 is 8
-run/0: ingredient 1 is 1
-run/0: product 0 is 9
-mem/0: storing 9 in location 1022
-run/0: instruction interpolate/41
-run/0: loop/10 {name: "", value: -8, type: , properties: ["": ]}
-run/0: ingredient 0 is -8
-run/0: jumping to instruction 34
-run/0: instruction interpolate/34
-run/0: {name: "arg-done?", value: 15, type: 3, properties: ["arg-done?": "boolean"]} <- greater-or-equal/16 {name: "j", value: 14, type: 1, properties: ["j": "integer"]}, {name: "a-len", value: 6, type: 1, properties: ["a-len": "integer"]}
-run/0: ingredient 0 is j
-mem/0: location 1028 is 2
-run/0: ingredient 1 is a-len
-mem/0: location 1020 is 3
-run/0: product 0 is 0
-mem/0: storing 0 in location 1029
-run/0: instruction interpolate/35
-run/0: break-if/11 {name: "arg-done?", value: 15, type: 3, properties: ["arg-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
-mem/0: location 1029 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction interpolate/36
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/26 {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}, {name: "j", value: 14, type: 1, properties: ["j": "integer"]}
-run/0: ingredient 0 is {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}
-mem/0: location 1018 is 1009
-run/0: ingredient 1 is {name: "j", value: 14, type: 1, properties: ["j": "integer"]}
-mem/0: location 1028 is 2
-run/0: address to copy is 1012
-run/0: its type is 4
-mem/0: location 1012 is 99
-run/0: product 0 is 99
-mem/0: storing 99 in location 1025
-run/0: instruction interpolate/37
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character"]} <- index-address/27 {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
-run/0: ingredient 0 is result
-mem/0: location 1021 is 1074
-run/0: ingredient 1 is {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
-mem/0: location 1022 is 9
-run/0: address to copy is 1084
-run/0: product 0 is 1084
-mem/0: storing 1084 in location 1027
-run/0: instruction interpolate/38
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy/1 {name: "in", value: 11, type: 4, properties: ["in": "character"]}
-run/0: ingredient 0 is in
-mem/0: location 1025 is 99
-mem/0: location 1027 is 1084
-mem/0: storing 99 in location 1084
-run/0: instruction interpolate/39
-run/0: {name: "j", value: 14, type: 1, properties: ["j": "integer"]} <- add/2 {name: "j", value: 14, type: 1, properties: ["j": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is j
-mem/0: location 1028 is 2
-run/0: ingredient 1 is 1
-run/0: product 0 is 3
-mem/0: storing 3 in location 1028
-run/0: instruction interpolate/40
-run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- add/2 {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is result-idx
-mem/0: location 1022 is 9
-run/0: ingredient 1 is 1
-run/0: product 0 is 10
-mem/0: storing 10 in location 1022
-run/0: instruction interpolate/41
-run/0: loop/10 {name: "", value: -8, type: , properties: ["": ]}
-run/0: ingredient 0 is -8
-run/0: jumping to instruction 34
-run/0: instruction interpolate/34
-run/0: {name: "arg-done?", value: 15, type: 3, properties: ["arg-done?": "boolean"]} <- greater-or-equal/16 {name: "j", value: 14, type: 1, properties: ["j": "integer"]}, {name: "a-len", value: 6, type: 1, properties: ["a-len": "integer"]}
-run/0: ingredient 0 is j
-mem/0: location 1028 is 3
-run/0: ingredient 1 is a-len
-mem/0: location 1020 is 3
-run/0: product 0 is 1
-mem/0: storing 1 in location 1029
-run/0: instruction interpolate/35
-run/0: break-if/11 {name: "arg-done?", value: 15, type: 3, properties: ["arg-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
-mem/0: location 1029 is 1
-run/0: ingredient 0 is 1
-run/0: ingredient 1 is 
-run/0: jumping to instruction 42
-run/0: instruction interpolate/43
-run/0: {name: "i", value: 9, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1023 is 7
-run/0: ingredient 1 is 1
-run/0: product 0 is 8
-mem/0: storing 8 in location 1023
-run/0: instruction interpolate/44
-run/0: loop/10 {name: "", value: -27, type: , properties: ["": ]}
-run/0: ingredient 0 is -27
-run/0: jumping to instruction 18
-run/0: instruction interpolate/18
-run/0: {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character"]}, {name: "arg-received?", value: 5, type: 3, properties: ["arg-received?": "boolean"]} <- next-ingredient/30 
-mem/0: storing 0 in location 1019
-run/0: instruction interpolate/19
-run/0: break-unless/12 {name: "arg-received?", value: 5, type: 3, properties: ["arg-received?": "boolean"]}, {name: "", value: 25, type: , properties: ["": ]}
-mem/0: location 1019 is 0
-run/0: ingredient 0 is 0
-run/0: ingredient 1 is 
-run/0: jumping to instruction 45
-run/0: instruction interpolate/47
-run/0: {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1023 is 8
-run/0: ingredient 1 is tem-len
-mem/0: location 1016 is 8
-run/0: product 0 is 1
-mem/0: storing 1 in location 1024
-run/0: instruction interpolate/48
-run/0: break-if/11 {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
-mem/0: location 1024 is 1
-run/0: ingredient 0 is 1
-run/0: ingredient 1 is 
-run/0: jumping to instruction 55
-run/0: instruction interpolate/56
-run/0: reply/33 {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character"]}
-mem/0: location 1021 is 1074
-run/0: result 0 is 1074
-mem/0: storing 1074 in location 3
-run/0: instruction run1001/3
-run/0: {name: "4", value: 4, type: 5-4, properties: ["4": "array":"character", "raw": ]} <- copy/1 {name: "3", value: 3, type: 2-5-4, properties: ["3": "address":"array":"character", "raw": , "deref": ]}
-run/0: ingredient 0 is 3
-mem/0: location 3 is 1074
-mem/0: location 1074 is 10
-mem/0: location 1075 is 104
-mem/0: location 1076 is 101
-mem/0: location 1077 is 108
-mem/0: location 1078 is 108
-mem/0: location 1079 is 111
-mem/0: location 1080 is 44
-mem/0: location 1081 is 32
-mem/0: location 1082 is 97
-mem/0: location 1083 is 98
-mem/0: location 1084 is 99
-mem/0: storing 10 in location 4
-mem/0: storing 104 in location 5
-mem/0: storing 101 in location 6
-mem/0: storing 108 in location 7
-mem/0: storing 108 in location 8
-mem/0: storing 111 in location 9
-mem/0: storing 44 in location 10
-mem/0: storing 32 in location 11
-mem/0: storing 97 in location 12
-mem/0: storing 98 in location 13
-mem/0: storing 99 in location 14
-run/0: instruction interpolate-at-end/1
-run/0: memory-should-contain/46 {name: "
-    4:string <- [hello, abc]
-  ", value: 0, type: 0, properties: ["
-    4:string <- [hello, abc]
-  ": "literal-string"]}
-run/0: checking string length at 4
-run/0: checking location 5
-run/0: checking location 6
-run/0: checking location 7
-run/0: checking location 8
-run/0: checking location 9
-run/0: checking location 10
-run/0: checking location 11
-run/0: checking location 12
-run/0: checking location 13
-run/0: checking location 14
diff --git a/cpp/.traces/interpolate-at-start b/cpp/.traces/interpolate-at-start
deleted file mode 100644
index 5a6164e7..00000000
--- a/cpp/.traces/interpolate-at-start
+++ /dev/null
@@ -1,925 +0,0 @@
-parse/0: instruction: run
-parse/0:   ingredient: {name: "
-    1:address:array:character/raw <- new [_, hello!]
-    2:address:array:character/raw <- new [abc]
-    3:address:array:character/raw <- interpolate 1:address:array:character/raw, 2:address:array:character/raw
-    4:array:character/raw <- copy 3:address:array:character/raw/deref
-  ", value: 0, type: 0, properties: ["
-    1:address:array:character/raw <- new [_, hello!]
-    2:address:array:character/raw <- new [abc]
-    3:address:array:character/raw <- interpolate 1:address:array:character/raw, 2:address:array:character/raw
-    4:array:character/raw <- copy 3:address:array:character/raw/deref
-  ": "literal-string"]}
-parse/0: instruction: memory-should-contain
-parse/0:   ingredient: {name: "
-    4:string <- [abc, hello!]
-    16 <- 0  # out of bounds
-  ", value: 0, type: 0, properties: ["
-    4:string <- [abc, hello!]
-    16 <- 0  # out of bounds
-  ": "literal-string"]}
-after-brace/0: recipe interpolate-at-start
-after-brace/0: run ...
-after-brace/0: memory-should-contain ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: interpolate-at-start
-run/0: instruction interpolate-at-start/0
-run/0: run/45 {name: "
-    1:address:array:character/raw <- new [_, hello!]
-    2:address:array:character/raw <- new [abc]
-    3:address:array:character/raw <- interpolate 1:address:array:character/raw, 2:address:array:character/raw
-    4:array:character/raw <- copy 3:address:array:character/raw/deref
-  ", value: 0, type: 0, properties: ["
-    1:address:array:character/raw <- new [_, hello!]
-    2:address:array:character/raw <- new [abc]
-    3:address:array:character/raw <- interpolate 1:address:array:character/raw, 2:address:array:character/raw
-    4:array:character/raw <- copy 3:address:array:character/raw/deref
-  ": "literal-string"]}
-parse/0: instruction: new
-parse/0:   ingredient: {name: "_, hello!", value: 0, type: 0, properties: ["_, hello!": "literal-string"]}
-parse/0:   product: {name: "1", value: 0, type: 2-5-4, properties: ["1": "address":"array":"character", "raw": ]}
-parse/0: instruction: new
-parse/0:   ingredient: {name: "abc", value: 0, type: 0, properties: ["abc": "literal-string"]}
-parse/0:   product: {name: "2", value: 0, type: 2-5-4, properties: ["2": "address":"array":"character", "raw": ]}
-parse/0: instruction: interpolate
-parse/0:   ingredient: {name: "1", value: 0, type: 2-5-4, properties: ["1": "address":"array":"character", "raw": ]}
-parse/0:   ingredient: {name: "2", value: 0, type: 2-5-4, properties: ["2": "address":"array":"character", "raw": ]}
-parse/0:   product: {name: "3", value: 0, type: 2-5-4, properties: ["3": "address":"array":"character", "raw": ]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "3", value: 0, type: 2-5-4, properties: ["3": "address":"array":"character", "raw": , "deref": ]}
-parse/0:   product: {name: "4", value: 0, type: 5-4, properties: ["4": "array":"character", "raw": ]}
-new/0: _, hello! -> 0
-new/0: abc -> 0
-after-brace/0: recipe run1001
-after-brace/0: new ...
-after-brace/0: new ...
-after-brace/0: interpolate ...
-after-brace/0: copy ...
-run/0: instruction run1001/0
-run/0: {name: "1", value: 1, type: 2-5-4, properties: ["1": "address":"array":"character", "raw": ]} <- new/44 {name: "_, hello!", value: 0, type: 0, properties: ["_, hello!": "literal-string"]}
-mem/0: storing 1000 in location 1
-run/0: instruction run1001/1
-run/0: {name: "2", value: 2, type: 2-5-4, properties: ["2": "address":"array":"character", "raw": ]} <- new/44 {name: "abc", value: 0, type: 0, properties: ["abc": "literal-string"]}
-mem/0: storing 1010 in location 2
-run/0: instruction run1001/2
-run/0: {name: "3", value: 3, type: 2-5-4, properties: ["3": "address":"array":"character", "raw": ]} <- interpolate/107 {name: "1", value: 1, type: 2-5-4, properties: ["1": "address":"array":"character", "raw": ]}, {name: "2", value: 2, type: 2-5-4, properties: ["2": "address":"array":"character", "raw": ]}
-mem/0: location 1 is 1000
-mem/0: location 2 is 1010
-run/0: instruction interpolate/0
-run/0: {name: "default-space", value: 0, type: 5-2-1, properties: ["default-space": "array":"address":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "60", value: 60, type: 0, properties: ["60": "literal"]}
-mem/0: array size is 60
-mem/0: new alloc: 1014
-run/0: instruction interpolate/1
-run/0: {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character"]} <- next-ingredient/30 
-run/0: product 0 is 1000
-mem/0: storing 1000 in location 1016
-run/0: instruction interpolate/2
-run/0: {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]} <- length/28 {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}
-mem/0: location 1016 is 1000
-mem/0: storing 9 in location 1017
-run/0: instruction interpolate/3
-run/0: {name: "result-len", value: 3, type: 1, properties: ["result-len": "integer"]} <- copy/1 {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]}
-run/0: ingredient 0 is tem-len
-mem/0: location 1017 is 9
-mem/0: storing 9 in location 1018
-run/0: instruction interpolate/5
-run/0: {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character"]}, {name: "arg-received?", value: 5, type: 3, properties: ["arg-received?": "boolean"]} <- next-ingredient/30 
-run/0: product 0 is 1010
-mem/0: storing 1010 in location 1019
-mem/0: storing 1 in location 1020
-run/0: instruction interpolate/6
-run/0: break-unless/12 {name: "arg-received?", value: 5, type: 3, properties: ["arg-received?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
-mem/0: location 1020 is 1
-run/0: ingredient 0 is 1
-run/0: jump-unless fell through
-run/0: instruction interpolate/7
-run/0: {name: "a-len", value: 6, type: 1, properties: ["a-len": "integer"]} <- length/28 {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}
-mem/0: location 1019 is 1010
-mem/0: storing 3 in location 1021
-run/0: instruction interpolate/8
-run/0: {name: "result-len", value: 3, type: 1, properties: ["result-len": "integer"]} <- add/2 {name: "result-len", value: 3, type: 1, properties: ["result-len": "integer"]}, {name: "a-len", value: 6, type: 1, properties: ["a-len": "integer"]}
-run/0: ingredient 0 is result-len
-mem/0: location 1018 is 9
-run/0: ingredient 1 is a-len
-mem/0: location 1021 is 3
-run/0: product 0 is 12
-mem/0: storing 12 in location 1018
-run/0: instruction interpolate/9
-run/0: {name: "result-len", value: 3, type: 1, properties: ["result-len": "integer"]} <- subtract/3 {name: "result-len", value: 3, type: 1, properties: ["result-len": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is result-len
-mem/0: location 1018 is 12
-run/0: ingredient 1 is 1
-run/0: product 0 is 11
-mem/0: storing 11 in location 1018
-run/0: instruction interpolate/10
-run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
-run/0: ingredient 0 is -6
-run/0: jumping to instruction 5
-run/0: instruction interpolate/5
-run/0: {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character"]}, {name: "arg-received?", value: 5, type: 3, properties: ["arg-received?": "boolean"]} <- next-ingredient/30 
-mem/0: storing 0 in location 1020
-run/0: instruction interpolate/6
-run/0: break-unless/12 {name: "arg-received?", value: 5, type: 3, properties: ["arg-received?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
-mem/0: location 1020 is 0
-run/0: ingredient 0 is 0
-run/0: ingredient 1 is 
-run/0: jumping to instruction 11
-run/0: instruction interpolate/12
-run/0: rewind-ingredients/31 
-run/0: instruction interpolate/13
-run/0: {name: "_", value: 0, type: 0, properties: ["_": "dummy"]} <- next-ingredient/30 
-run/0: product 0 is 1000
-run/0: instruction interpolate/14
-run/0: {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character"]} <- new/44 {name: "character", value: 4, type: 0, properties: ["character": "type"]}, {name: "result-len", value: 3, type: 1, properties: ["result-len": "integer"]}
-mem/0: location 1018 is 11
-mem/0: array size is 11
-mem/0: new alloc: 1075
-mem/0: storing 1075 in location 1022
-run/0: instruction interpolate/15
-run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
-mem/0: storing 0 in location 1023
-run/0: instruction interpolate/16
-run/0: {name: "i", value: 9, type: 1, properties: ["i": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
-mem/0: storing 0 in location 1024
-run/0: instruction interpolate/18
-run/0: {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character"]}, {name: "arg-received?", value: 5, type: 3, properties: ["arg-received?": "boolean"]} <- next-ingredient/30 
-run/0: product 0 is 1010
-mem/0: storing 1010 in location 1019
-mem/0: storing 1 in location 1020
-run/0: instruction interpolate/19
-run/0: break-unless/12 {name: "arg-received?", value: 5, type: 3, properties: ["arg-received?": "boolean"]}, {name: "", value: 25, type: , properties: ["": ]}
-mem/0: location 1020 is 1
-run/0: ingredient 0 is 1
-run/0: jump-unless fell through
-run/0: instruction interpolate/21
-run/0: {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1024 is 0
-run/0: ingredient 1 is tem-len
-mem/0: location 1017 is 9
-run/0: product 0 is 0
-mem/0: storing 0 in location 1025
-run/0: instruction interpolate/22
-run/0: break-if/11 {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]}, {name: "2", value: 2, type: 0, properties: ["2": "blocks"]}
-mem/0: location 1025 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction interpolate/23
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/26 {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}, {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}
-mem/0: location 1016 is 1000
-run/0: ingredient 1 is {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
-mem/0: location 1024 is 0
-run/0: address to copy is 1001
-run/0: its type is 4
-mem/0: location 1001 is 95
-run/0: product 0 is 95
-mem/0: storing 95 in location 1026
-run/0: instruction interpolate/24
-run/0: {name: "underscore?", value: 12, type: 3, properties: ["underscore?": "boolean"]} <- equal/13 {name: "in", value: 11, type: 4, properties: ["in": "character"]}, {name: "95", value: 95, type: 0, properties: ["95": "literal"]}
-run/0: ingredient 0 is in
-mem/0: location 1026 is 95
-run/0: ingredient 1 is 95
-run/0: product 0 is 1
-mem/0: storing 1 in location 1027
-run/0: instruction interpolate/25
-run/0: break-if/11 {name: "underscore?", value: 12, type: 3, properties: ["underscore?": "boolean"]}, {name: "", value: 5, type: , properties: ["": ]}
-mem/0: location 1027 is 1
-run/0: ingredient 0 is 1
-run/0: ingredient 1 is 
-run/0: jumping to instruction 31
-run/0: instruction interpolate/32
-run/0: {name: "j", value: 14, type: 1, properties: ["j": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
-mem/0: storing 0 in location 1029
-run/0: instruction interpolate/34
-run/0: {name: "arg-done?", value: 15, type: 3, properties: ["arg-done?": "boolean"]} <- greater-or-equal/16 {name: "j", value: 14, type: 1, properties: ["j": "integer"]}, {name: "a-len", value: 6, type: 1, properties: ["a-len": "integer"]}
-run/0: ingredient 0 is j
-mem/0: location 1029 is 0
-run/0: ingredient 1 is a-len
-mem/0: location 1021 is 3
-run/0: product 0 is 0
-mem/0: storing 0 in location 1030
-run/0: instruction interpolate/35
-run/0: break-if/11 {name: "arg-done?", value: 15, type: 3, properties: ["arg-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
-mem/0: location 1030 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction interpolate/36
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/26 {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}, {name: "j", value: 14, type: 1, properties: ["j": "integer"]}
-run/0: ingredient 0 is {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}
-mem/0: location 1019 is 1010
-run/0: ingredient 1 is {name: "j", value: 14, type: 1, properties: ["j": "integer"]}
-mem/0: location 1029 is 0
-run/0: address to copy is 1011
-run/0: its type is 4
-mem/0: location 1011 is 97
-run/0: product 0 is 97
-mem/0: storing 97 in location 1026
-run/0: instruction interpolate/37
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character"]} <- index-address/27 {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
-run/0: ingredient 0 is result
-mem/0: location 1022 is 1075
-run/0: ingredient 1 is {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
-mem/0: location 1023 is 0
-run/0: address to copy is 1076
-run/0: product 0 is 1076
-mem/0: storing 1076 in location 1028
-run/0: instruction interpolate/38
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy/1 {name: "in", value: 11, type: 4, properties: ["in": "character"]}
-run/0: ingredient 0 is in
-mem/0: location 1026 is 97
-mem/0: location 1028 is 1076
-mem/0: storing 97 in location 1076
-run/0: instruction interpolate/39
-run/0: {name: "j", value: 14, type: 1, properties: ["j": "integer"]} <- add/2 {name: "j", value: 14, type: 1, properties: ["j": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is j
-mem/0: location 1029 is 0
-run/0: ingredient 1 is 1
-run/0: product 0 is 1
-mem/0: storing 1 in location 1029
-run/0: instruction interpolate/40
-run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- add/2 {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is result-idx
-mem/0: location 1023 is 0
-run/0: ingredient 1 is 1
-run/0: product 0 is 1
-mem/0: storing 1 in location 1023
-run/0: instruction interpolate/41
-run/0: loop/10 {name: "", value: -8, type: , properties: ["": ]}
-run/0: ingredient 0 is -8
-run/0: jumping to instruction 34
-run/0: instruction interpolate/34
-run/0: {name: "arg-done?", value: 15, type: 3, properties: ["arg-done?": "boolean"]} <- greater-or-equal/16 {name: "j", value: 14, type: 1, properties: ["j": "integer"]}, {name: "a-len", value: 6, type: 1, properties: ["a-len": "integer"]}
-run/0: ingredient 0 is j
-mem/0: location 1029 is 1
-run/0: ingredient 1 is a-len
-mem/0: location 1021 is 3
-run/0: product 0 is 0
-mem/0: storing 0 in location 1030
-run/0: instruction interpolate/35
-run/0: break-if/11 {name: "arg-done?", value: 15, type: 3, properties: ["arg-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
-mem/0: location 1030 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction interpolate/36
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/26 {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}, {name: "j", value: 14, type: 1, properties: ["j": "integer"]}
-run/0: ingredient 0 is {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}
-mem/0: location 1019 is 1010
-run/0: ingredient 1 is {name: "j", value: 14, type: 1, properties: ["j": "integer"]}
-mem/0: location 1029 is 1
-run/0: address to copy is 1012
-run/0: its type is 4
-mem/0: location 1012 is 98
-run/0: product 0 is 98
-mem/0: storing 98 in location 1026
-run/0: instruction interpolate/37
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character"]} <- index-address/27 {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
-run/0: ingredient 0 is result
-mem/0: location 1022 is 1075
-run/0: ingredient 1 is {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
-mem/0: location 1023 is 1
-run/0: address to copy is 1077
-run/0: product 0 is 1077
-mem/0: storing 1077 in location 1028
-run/0: instruction interpolate/38
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy/1 {name: "in", value: 11, type: 4, properties: ["in": "character"]}
-run/0: ingredient 0 is in
-mem/0: location 1026 is 98
-mem/0: location 1028 is 1077
-mem/0: storing 98 in location 1077
-run/0: instruction interpolate/39
-run/0: {name: "j", value: 14, type: 1, properties: ["j": "integer"]} <- add/2 {name: "j", value: 14, type: 1, properties: ["j": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is j
-mem/0: location 1029 is 1
-run/0: ingredient 1 is 1
-run/0: product 0 is 2
-mem/0: storing 2 in location 1029
-run/0: instruction interpolate/40
-run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- add/2 {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is result-idx
-mem/0: location 1023 is 1
-run/0: ingredient 1 is 1
-run/0: product 0 is 2
-mem/0: storing 2 in location 1023
-run/0: instruction interpolate/41
-run/0: loop/10 {name: "", value: -8, type: , properties: ["": ]}
-run/0: ingredient 0 is -8
-run/0: jumping to instruction 34
-run/0: instruction interpolate/34
-run/0: {name: "arg-done?", value: 15, type: 3, properties: ["arg-done?": "boolean"]} <- greater-or-equal/16 {name: "j", value: 14, type: 1, properties: ["j": "integer"]}, {name: "a-len", value: 6, type: 1, properties: ["a-len": "integer"]}
-run/0: ingredient 0 is j
-mem/0: location 1029 is 2
-run/0: ingredient 1 is a-len
-mem/0: location 1021 is 3
-run/0: product 0 is 0
-mem/0: storing 0 in location 1030
-run/0: instruction interpolate/35
-run/0: break-if/11 {name: "arg-done?", value: 15, type: 3, properties: ["arg-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
-mem/0: location 1030 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction interpolate/36
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/26 {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}, {name: "j", value: 14, type: 1, properties: ["j": "integer"]}
-run/0: ingredient 0 is {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}
-mem/0: location 1019 is 1010
-run/0: ingredient 1 is {name: "j", value: 14, type: 1, properties: ["j": "integer"]}
-mem/0: location 1029 is 2
-run/0: address to copy is 1013
-run/0: its type is 4
-mem/0: location 1013 is 99
-run/0: product 0 is 99
-mem/0: storing 99 in location 1026
-run/0: instruction interpolate/37
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character"]} <- index-address/27 {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
-run/0: ingredient 0 is result
-mem/0: location 1022 is 1075
-run/0: ingredient 1 is {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
-mem/0: location 1023 is 2
-run/0: address to copy is 1078
-run/0: product 0 is 1078
-mem/0: storing 1078 in location 1028
-run/0: instruction interpolate/38
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy/1 {name: "in", value: 11, type: 4, properties: ["in": "character"]}
-run/0: ingredient 0 is in
-mem/0: location 1026 is 99
-mem/0: location 1028 is 1078
-mem/0: storing 99 in location 1078
-run/0: instruction interpolate/39
-run/0: {name: "j", value: 14, type: 1, properties: ["j": "integer"]} <- add/2 {name: "j", value: 14, type: 1, properties: ["j": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is j
-mem/0: location 1029 is 2
-run/0: ingredient 1 is 1
-run/0: product 0 is 3
-mem/0: storing 3 in location 1029
-run/0: instruction interpolate/40
-run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- add/2 {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is result-idx
-mem/0: location 1023 is 2
-run/0: ingredient 1 is 1
-run/0: product 0 is 3
-mem/0: storing 3 in location 1023
-run/0: instruction interpolate/41
-run/0: loop/10 {name: "", value: -8, type: , properties: ["": ]}
-run/0: ingredient 0 is -8
-run/0: jumping to instruction 34
-run/0: instruction interpolate/34
-run/0: {name: "arg-done?", value: 15, type: 3, properties: ["arg-done?": "boolean"]} <- greater-or-equal/16 {name: "j", value: 14, type: 1, properties: ["j": "integer"]}, {name: "a-len", value: 6, type: 1, properties: ["a-len": "integer"]}
-run/0: ingredient 0 is j
-mem/0: location 1029 is 3
-run/0: ingredient 1 is a-len
-mem/0: location 1021 is 3
-run/0: product 0 is 1
-mem/0: storing 1 in location 1030
-run/0: instruction interpolate/35
-run/0: break-if/11 {name: "arg-done?", value: 15, type: 3, properties: ["arg-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
-mem/0: location 1030 is 1
-run/0: ingredient 0 is 1
-run/0: ingredient 1 is 
-run/0: jumping to instruction 42
-run/0: instruction interpolate/43
-run/0: {name: "i", value: 9, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1024 is 0
-run/0: ingredient 1 is 1
-run/0: product 0 is 1
-mem/0: storing 1 in location 1024
-run/0: instruction interpolate/44
-run/0: loop/10 {name: "", value: -27, type: , properties: ["": ]}
-run/0: ingredient 0 is -27
-run/0: jumping to instruction 18
-run/0: instruction interpolate/18
-run/0: {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character"]}, {name: "arg-received?", value: 5, type: 3, properties: ["arg-received?": "boolean"]} <- next-ingredient/30 
-mem/0: storing 0 in location 1020
-run/0: instruction interpolate/19
-run/0: break-unless/12 {name: "arg-received?", value: 5, type: 3, properties: ["arg-received?": "boolean"]}, {name: "", value: 25, type: , properties: ["": ]}
-mem/0: location 1020 is 0
-run/0: ingredient 0 is 0
-run/0: ingredient 1 is 
-run/0: jumping to instruction 45
-run/0: instruction interpolate/47
-run/0: {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1024 is 1
-run/0: ingredient 1 is tem-len
-mem/0: location 1017 is 9
-run/0: product 0 is 0
-mem/0: storing 0 in location 1025
-run/0: instruction interpolate/48
-run/0: break-if/11 {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
-mem/0: location 1025 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction interpolate/49
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/26 {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}, {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}
-mem/0: location 1016 is 1000
-run/0: ingredient 1 is {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
-mem/0: location 1024 is 1
-run/0: address to copy is 1002
-run/0: its type is 4
-mem/0: location 1002 is 44
-run/0: product 0 is 44
-mem/0: storing 44 in location 1026
-run/0: instruction interpolate/50
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character"]} <- index-address/27 {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
-run/0: ingredient 0 is result
-mem/0: location 1022 is 1075
-run/0: ingredient 1 is {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
-mem/0: location 1023 is 3
-run/0: address to copy is 1079
-run/0: product 0 is 1079
-mem/0: storing 1079 in location 1028
-run/0: instruction interpolate/51
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy/1 {name: "in", value: 11, type: 4, properties: ["in": "character"]}
-run/0: ingredient 0 is in
-mem/0: location 1026 is 44
-mem/0: location 1028 is 1079
-mem/0: storing 44 in location 1079
-run/0: instruction interpolate/52
-run/0: {name: "i", value: 9, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1024 is 1
-run/0: ingredient 1 is 1
-run/0: product 0 is 2
-mem/0: storing 2 in location 1024
-run/0: instruction interpolate/53
-run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- add/2 {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is result-idx
-mem/0: location 1023 is 3
-run/0: ingredient 1 is 1
-run/0: product 0 is 4
-mem/0: storing 4 in location 1023
-run/0: instruction interpolate/54
-run/0: loop/10 {name: "", value: -8, type: , properties: ["": ]}
-run/0: ingredient 0 is -8
-run/0: jumping to instruction 47
-run/0: instruction interpolate/47
-run/0: {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1024 is 2
-run/0: ingredient 1 is tem-len
-mem/0: location 1017 is 9
-run/0: product 0 is 0
-mem/0: storing 0 in location 1025
-run/0: instruction interpolate/48
-run/0: break-if/11 {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
-mem/0: location 1025 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction interpolate/49
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/26 {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}, {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}
-mem/0: location 1016 is 1000
-run/0: ingredient 1 is {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
-mem/0: location 1024 is 2
-run/0: address to copy is 1003
-run/0: its type is 4
-mem/0: location 1003 is 32
-run/0: product 0 is 32
-mem/0: storing 32 in location 1026
-run/0: instruction interpolate/50
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character"]} <- index-address/27 {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
-run/0: ingredient 0 is result
-mem/0: location 1022 is 1075
-run/0: ingredient 1 is {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
-mem/0: location 1023 is 4
-run/0: address to copy is 1080
-run/0: product 0 is 1080
-mem/0: storing 1080 in location 1028
-run/0: instruction interpolate/51
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy/1 {name: "in", value: 11, type: 4, properties: ["in": "character"]}
-run/0: ingredient 0 is in
-mem/0: location 1026 is 32
-mem/0: location 1028 is 1080
-mem/0: storing 32 in location 1080
-run/0: instruction interpolate/52
-run/0: {name: "i", value: 9, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1024 is 2
-run/0: ingredient 1 is 1
-run/0: product 0 is 3
-mem/0: storing 3 in location 1024
-run/0: instruction interpolate/53
-run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- add/2 {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is result-idx
-mem/0: location 1023 is 4
-run/0: ingredient 1 is 1
-run/0: product 0 is 5
-mem/0: storing 5 in location 1023
-run/0: instruction interpolate/54
-run/0: loop/10 {name: "", value: -8, type: , properties: ["": ]}
-run/0: ingredient 0 is -8
-run/0: jumping to instruction 47
-run/0: instruction interpolate/47
-run/0: {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1024 is 3
-run/0: ingredient 1 is tem-len
-mem/0: location 1017 is 9
-run/0: product 0 is 0
-mem/0: storing 0 in location 1025
-run/0: instruction interpolate/48
-run/0: break-if/11 {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
-mem/0: location 1025 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction interpolate/49
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/26 {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}, {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}
-mem/0: location 1016 is 1000
-run/0: ingredient 1 is {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
-mem/0: location 1024 is 3
-run/0: address to copy is 1004
-run/0: its type is 4
-mem/0: location 1004 is 104
-run/0: product 0 is 104
-mem/0: storing 104 in location 1026
-run/0: instruction interpolate/50
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character"]} <- index-address/27 {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
-run/0: ingredient 0 is result
-mem/0: location 1022 is 1075
-run/0: ingredient 1 is {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
-mem/0: location 1023 is 5
-run/0: address to copy is 1081
-run/0: product 0 is 1081
-mem/0: storing 1081 in location 1028
-run/0: instruction interpolate/51
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy/1 {name: "in", value: 11, type: 4, properties: ["in": "character"]}
-run/0: ingredient 0 is in
-mem/0: location 1026 is 104
-mem/0: location 1028 is 1081
-mem/0: storing 104 in location 1081
-run/0: instruction interpolate/52
-run/0: {name: "i", value: 9, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1024 is 3
-run/0: ingredient 1 is 1
-run/0: product 0 is 4
-mem/0: storing 4 in location 1024
-run/0: instruction interpolate/53
-run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- add/2 {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is result-idx
-mem/0: location 1023 is 5
-run/0: ingredient 1 is 1
-run/0: product 0 is 6
-mem/0: storing 6 in location 1023
-run/0: instruction interpolate/54
-run/0: loop/10 {name: "", value: -8, type: , properties: ["": ]}
-run/0: ingredient 0 is -8
-run/0: jumping to instruction 47
-run/0: instruction interpolate/47
-run/0: {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1024 is 4
-run/0: ingredient 1 is tem-len
-mem/0: location 1017 is 9
-run/0: product 0 is 0
-mem/0: storing 0 in location 1025
-run/0: instruction interpolate/48
-run/0: break-if/11 {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
-mem/0: location 1025 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction interpolate/49
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/26 {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}, {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}
-mem/0: location 1016 is 1000
-run/0: ingredient 1 is {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
-mem/0: location 1024 is 4
-run/0: address to copy is 1005
-run/0: its type is 4
-mem/0: location 1005 is 101
-run/0: product 0 is 101
-mem/0: storing 101 in location 1026
-run/0: instruction interpolate/50
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character"]} <- index-address/27 {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
-run/0: ingredient 0 is result
-mem/0: location 1022 is 1075
-run/0: ingredient 1 is {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
-mem/0: location 1023 is 6
-run/0: address to copy is 1082
-run/0: product 0 is 1082
-mem/0: storing 1082 in location 1028
-run/0: instruction interpolate/51
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy/1 {name: "in", value: 11, type: 4, properties: ["in": "character"]}
-run/0: ingredient 0 is in
-mem/0: location 1026 is 101
-mem/0: location 1028 is 1082
-mem/0: storing 101 in location 1082
-run/0: instruction interpolate/52
-run/0: {name: "i", value: 9, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1024 is 4
-run/0: ingredient 1 is 1
-run/0: product 0 is 5
-mem/0: storing 5 in location 1024
-run/0: instruction interpolate/53
-run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- add/2 {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is result-idx
-mem/0: location 1023 is 6
-run/0: ingredient 1 is 1
-run/0: product 0 is 7
-mem/0: storing 7 in location 1023
-run/0: instruction interpolate/54
-run/0: loop/10 {name: "", value: -8, type: , properties: ["": ]}
-run/0: ingredient 0 is -8
-run/0: jumping to instruction 47
-run/0: instruction interpolate/47
-run/0: {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1024 is 5
-run/0: ingredient 1 is tem-len
-mem/0: location 1017 is 9
-run/0: product 0 is 0
-mem/0: storing 0 in location 1025
-run/0: instruction interpolate/48
-run/0: break-if/11 {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
-mem/0: location 1025 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction interpolate/49
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/26 {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}, {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}
-mem/0: location 1016 is 1000
-run/0: ingredient 1 is {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
-mem/0: location 1024 is 5
-run/0: address to copy is 1006
-run/0: its type is 4
-mem/0: location 1006 is 108
-run/0: product 0 is 108
-mem/0: storing 108 in location 1026
-run/0: instruction interpolate/50
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character"]} <- index-address/27 {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
-run/0: ingredient 0 is result
-mem/0: location 1022 is 1075
-run/0: ingredient 1 is {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
-mem/0: location 1023 is 7
-run/0: address to copy is 1083
-run/0: product 0 is 1083
-mem/0: storing 1083 in location 1028
-run/0: instruction interpolate/51
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy/1 {name: "in", value: 11, type: 4, properties: ["in": "character"]}
-run/0: ingredient 0 is in
-mem/0: location 1026 is 108
-mem/0: location 1028 is 1083
-mem/0: storing 108 in location 1083
-run/0: instruction interpolate/52
-run/0: {name: "i", value: 9, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1024 is 5
-run/0: ingredient 1 is 1
-run/0: product 0 is 6
-mem/0: storing 6 in location 1024
-run/0: instruction interpolate/53
-run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- add/2 {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is result-idx
-mem/0: location 1023 is 7
-run/0: ingredient 1 is 1
-run/0: product 0 is 8
-mem/0: storing 8 in location 1023
-run/0: instruction interpolate/54
-run/0: loop/10 {name: "", value: -8, type: , properties: ["": ]}
-run/0: ingredient 0 is -8
-run/0: jumping to instruction 47
-run/0: instruction interpolate/47
-run/0: {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1024 is 6
-run/0: ingredient 1 is tem-len
-mem/0: location 1017 is 9
-run/0: product 0 is 0
-mem/0: storing 0 in location 1025
-run/0: instruction interpolate/48
-run/0: break-if/11 {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
-mem/0: location 1025 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction interpolate/49
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/26 {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}, {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}
-mem/0: location 1016 is 1000
-run/0: ingredient 1 is {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
-mem/0: location 1024 is 6
-run/0: address to copy is 1007
-run/0: its type is 4
-mem/0: location 1007 is 108
-run/0: product 0 is 108
-mem/0: storing 108 in location 1026
-run/0: instruction interpolate/50
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character"]} <- index-address/27 {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
-run/0: ingredient 0 is result
-mem/0: location 1022 is 1075
-run/0: ingredient 1 is {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
-mem/0: location 1023 is 8
-run/0: address to copy is 1084
-run/0: product 0 is 1084
-mem/0: storing 1084 in location 1028
-run/0: instruction interpolate/51
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy/1 {name: "in", value: 11, type: 4, properties: ["in": "character"]}
-run/0: ingredient 0 is in
-mem/0: location 1026 is 108
-mem/0: location 1028 is 1084
-mem/0: storing 108 in location 1084
-run/0: instruction interpolate/52
-run/0: {name: "i", value: 9, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1024 is 6
-run/0: ingredient 1 is 1
-run/0: product 0 is 7
-mem/0: storing 7 in location 1024
-run/0: instruction interpolate/53
-run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- add/2 {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is result-idx
-mem/0: location 1023 is 8
-run/0: ingredient 1 is 1
-run/0: product 0 is 9
-mem/0: storing 9 in location 1023
-run/0: instruction interpolate/54
-run/0: loop/10 {name: "", value: -8, type: , properties: ["": ]}
-run/0: ingredient 0 is -8
-run/0: jumping to instruction 47
-run/0: instruction interpolate/47
-run/0: {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1024 is 7
-run/0: ingredient 1 is tem-len
-mem/0: location 1017 is 9
-run/0: product 0 is 0
-mem/0: storing 0 in location 1025
-run/0: instruction interpolate/48
-run/0: break-if/11 {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
-mem/0: location 1025 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction interpolate/49
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/26 {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}, {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}
-mem/0: location 1016 is 1000
-run/0: ingredient 1 is {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
-mem/0: location 1024 is 7
-run/0: address to copy is 1008
-run/0: its type is 4
-mem/0: location 1008 is 111
-run/0: product 0 is 111
-mem/0: storing 111 in location 1026
-run/0: instruction interpolate/50
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character"]} <- index-address/27 {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
-run/0: ingredient 0 is result
-mem/0: location 1022 is 1075
-run/0: ingredient 1 is {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
-mem/0: location 1023 is 9
-run/0: address to copy is 1085
-run/0: product 0 is 1085
-mem/0: storing 1085 in location 1028
-run/0: instruction interpolate/51
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy/1 {name: "in", value: 11, type: 4, properties: ["in": "character"]}
-run/0: ingredient 0 is in
-mem/0: location 1026 is 111
-mem/0: location 1028 is 1085
-mem/0: storing 111 in location 1085
-run/0: instruction interpolate/52
-run/0: {name: "i", value: 9, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1024 is 7
-run/0: ingredient 1 is 1
-run/0: product 0 is 8
-mem/0: storing 8 in location 1024
-run/0: instruction interpolate/53
-run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- add/2 {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is result-idx
-mem/0: location 1023 is 9
-run/0: ingredient 1 is 1
-run/0: product 0 is 10
-mem/0: storing 10 in location 1023
-run/0: instruction interpolate/54
-run/0: loop/10 {name: "", value: -8, type: , properties: ["": ]}
-run/0: ingredient 0 is -8
-run/0: jumping to instruction 47
-run/0: instruction interpolate/47
-run/0: {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1024 is 8
-run/0: ingredient 1 is tem-len
-mem/0: location 1017 is 9
-run/0: product 0 is 0
-mem/0: storing 0 in location 1025
-run/0: instruction interpolate/48
-run/0: break-if/11 {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
-mem/0: location 1025 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction interpolate/49
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/26 {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}, {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}
-mem/0: location 1016 is 1000
-run/0: ingredient 1 is {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
-mem/0: location 1024 is 8
-run/0: address to copy is 1009
-run/0: its type is 4
-mem/0: location 1009 is 33
-run/0: product 0 is 33
-mem/0: storing 33 in location 1026
-run/0: instruction interpolate/50
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character"]} <- index-address/27 {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
-run/0: ingredient 0 is result
-mem/0: location 1022 is 1075
-run/0: ingredient 1 is {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
-mem/0: location 1023 is 10
-run/0: address to copy is 1086
-run/0: product 0 is 1086
-mem/0: storing 1086 in location 1028
-run/0: instruction interpolate/51
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy/1 {name: "in", value: 11, type: 4, properties: ["in": "character"]}
-run/0: ingredient 0 is in
-mem/0: location 1026 is 33
-mem/0: location 1028 is 1086
-mem/0: storing 33 in location 1086
-run/0: instruction interpolate/52
-run/0: {name: "i", value: 9, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1024 is 8
-run/0: ingredient 1 is 1
-run/0: product 0 is 9
-mem/0: storing 9 in location 1024
-run/0: instruction interpolate/53
-run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- add/2 {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is result-idx
-mem/0: location 1023 is 10
-run/0: ingredient 1 is 1
-run/0: product 0 is 11
-mem/0: storing 11 in location 1023
-run/0: instruction interpolate/54
-run/0: loop/10 {name: "", value: -8, type: , properties: ["": ]}
-run/0: ingredient 0 is -8
-run/0: jumping to instruction 47
-run/0: instruction interpolate/47
-run/0: {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1024 is 9
-run/0: ingredient 1 is tem-len
-mem/0: location 1017 is 9
-run/0: product 0 is 1
-mem/0: storing 1 in location 1025
-run/0: instruction interpolate/48
-run/0: break-if/11 {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
-mem/0: location 1025 is 1
-run/0: ingredient 0 is 1
-run/0: ingredient 1 is 
-run/0: jumping to instruction 55
-run/0: instruction interpolate/56
-run/0: reply/33 {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character"]}
-mem/0: location 1022 is 1075
-run/0: result 0 is 1075
-mem/0: storing 1075 in location 3
-run/0: instruction run1001/3
-run/0: {name: "4", value: 4, type: 5-4, properties: ["4": "array":"character", "raw": ]} <- copy/1 {name: "3", value: 3, type: 2-5-4, properties: ["3": "address":"array":"character", "raw": , "deref": ]}
-run/0: ingredient 0 is 3
-mem/0: location 3 is 1075
-mem/0: location 1075 is 11
-mem/0: location 1076 is 97
-mem/0: location 1077 is 98
-mem/0: location 1078 is 99
-mem/0: location 1079 is 44
-mem/0: location 1080 is 32
-mem/0: location 1081 is 104
-mem/0: location 1082 is 101
-mem/0: location 1083 is 108
-mem/0: location 1084 is 108
-mem/0: location 1085 is 111
-mem/0: location 1086 is 33
-mem/0: storing 11 in location 4
-mem/0: storing 97 in location 5
-mem/0: storing 98 in location 6
-mem/0: storing 99 in location 7
-mem/0: storing 44 in location 8
-mem/0: storing 32 in location 9
-mem/0: storing 104 in location 10
-mem/0: storing 101 in location 11
-mem/0: storing 108 in location 12
-mem/0: storing 108 in location 13
-mem/0: storing 111 in location 14
-mem/0: storing 33 in location 15
-run/0: instruction interpolate-at-start/1
-run/0: memory-should-contain/46 {name: "
-    4:string <- [abc, hello!]
-    16 <- 0  # out of bounds
-  ", value: 0, type: 0, properties: ["
-    4:string <- [abc, hello!]
-    16 <- 0  # out of bounds
-  ": "literal-string"]}
-run/0: checking string length at 4
-run/0: checking location 5
-run/0: checking location 6
-run/0: checking location 7
-run/0: checking location 8
-run/0: checking location 9
-run/0: checking location 10
-run/0: checking location 11
-run/0: checking location 12
-run/0: checking location 13
-run/0: checking location 14
-run/0: checking location 15
-run/0: checking location 16
diff --git a/cpp/.traces/interpolate-works b/cpp/.traces/interpolate-works
deleted file mode 100644
index b9d98164..00000000
--- a/cpp/.traces/interpolate-works
+++ /dev/null
@@ -1,728 +0,0 @@
-parse/0: instruction: run
-parse/0:   ingredient: {name: "
-    1:address:array:character/raw <- new [abc _]
-    2:address:array:character/raw <- new [def]
-    3:address:array:character/raw <- interpolate 1:address:array:character/raw, 2:address:array:character/raw
-    4:array:character/raw <- copy 3:address:array:character/raw/deref
-  ", value: 0, type: 0, properties: ["
-    1:address:array:character/raw <- new [abc _]
-    2:address:array:character/raw <- new [def]
-    3:address:array:character/raw <- interpolate 1:address:array:character/raw, 2:address:array:character/raw
-    4:array:character/raw <- copy 3:address:array:character/raw/deref
-  ": "literal-string"]}
-parse/0: instruction: memory-should-contain
-parse/0:   ingredient: {name: "
-    4:string <- [abc def]
-  ", value: 0, type: 0, properties: ["
-    4:string <- [abc def]
-  ": "literal-string"]}
-after-brace/0: recipe interpolate-works
-after-brace/0: run ...
-after-brace/0: memory-should-contain ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: interpolate-works
-run/0: instruction interpolate-works/0
-run/0: run/45 {name: "
-    1:address:array:character/raw <- new [abc _]
-    2:address:array:character/raw <- new [def]
-    3:address:array:character/raw <- interpolate 1:address:array:character/raw, 2:address:array:character/raw
-    4:array:character/raw <- copy 3:address:array:character/raw/deref
-  ", value: 0, type: 0, properties: ["
-    1:address:array:character/raw <- new [abc _]
-    2:address:array:character/raw <- new [def]
-    3:address:array:character/raw <- interpolate 1:address:array:character/raw, 2:address:array:character/raw
-    4:array:character/raw <- copy 3:address:array:character/raw/deref
-  ": "literal-string"]}
-parse/0: instruction: new
-parse/0:   ingredient: {name: "abc _", value: 0, type: 0, properties: ["abc _": "literal-string"]}
-parse/0:   product: {name: "1", value: 0, type: 2-5-4, properties: ["1": "address":"array":"character", "raw": ]}
-parse/0: instruction: new
-parse/0:   ingredient: {name: "def", value: 0, type: 0, properties: ["def": "literal-string"]}
-parse/0:   product: {name: "2", value: 0, type: 2-5-4, properties: ["2": "address":"array":"character", "raw": ]}
-parse/0: instruction: interpolate
-parse/0:   ingredient: {name: "1", value: 0, type: 2-5-4, properties: ["1": "address":"array":"character", "raw": ]}
-parse/0:   ingredient: {name: "2", value: 0, type: 2-5-4, properties: ["2": "address":"array":"character", "raw": ]}
-parse/0:   product: {name: "3", value: 0, type: 2-5-4, properties: ["3": "address":"array":"character", "raw": ]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "3", value: 0, type: 2-5-4, properties: ["3": "address":"array":"character", "raw": , "deref": ]}
-parse/0:   product: {name: "4", value: 0, type: 5-4, properties: ["4": "array":"character", "raw": ]}
-new/0: abc _ -> 0
-new/0: def -> 0
-after-brace/0: recipe run1001
-after-brace/0: new ...
-after-brace/0: new ...
-after-brace/0: interpolate ...
-after-brace/0: copy ...
-run/0: instruction run1001/0
-run/0: {name: "1", value: 1, type: 2-5-4, properties: ["1": "address":"array":"character", "raw": ]} <- new/44 {name: "abc _", value: 0, type: 0, properties: ["abc _": "literal-string"]}
-mem/0: storing 1000 in location 1
-run/0: instruction run1001/1
-run/0: {name: "2", value: 2, type: 2-5-4, properties: ["2": "address":"array":"character", "raw": ]} <- new/44 {name: "def", value: 0, type: 0, properties: ["def": "literal-string"]}
-mem/0: storing 1006 in location 2
-run/0: instruction run1001/2
-run/0: {name: "3", value: 3, type: 2-5-4, properties: ["3": "address":"array":"character", "raw": ]} <- interpolate/107 {name: "1", value: 1, type: 2-5-4, properties: ["1": "address":"array":"character", "raw": ]}, {name: "2", value: 2, type: 2-5-4, properties: ["2": "address":"array":"character", "raw": ]}
-mem/0: location 1 is 1000
-mem/0: location 2 is 1006
-run/0: instruction interpolate/0
-run/0: {name: "default-space", value: 0, type: 5-2-1, properties: ["default-space": "array":"address":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "60", value: 60, type: 0, properties: ["60": "literal"]}
-mem/0: array size is 60
-mem/0: new alloc: 1010
-run/0: instruction interpolate/1
-run/0: {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character"]} <- next-ingredient/30 
-run/0: product 0 is 1000
-mem/0: storing 1000 in location 1012
-run/0: instruction interpolate/2
-run/0: {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]} <- length/28 {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}
-mem/0: location 1012 is 1000
-mem/0: storing 5 in location 1013
-run/0: instruction interpolate/3
-run/0: {name: "result-len", value: 3, type: 1, properties: ["result-len": "integer"]} <- copy/1 {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]}
-run/0: ingredient 0 is tem-len
-mem/0: location 1013 is 5
-mem/0: storing 5 in location 1014
-run/0: instruction interpolate/5
-run/0: {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character"]}, {name: "arg-received?", value: 5, type: 3, properties: ["arg-received?": "boolean"]} <- next-ingredient/30 
-run/0: product 0 is 1006
-mem/0: storing 1006 in location 1015
-mem/0: storing 1 in location 1016
-run/0: instruction interpolate/6
-run/0: break-unless/12 {name: "arg-received?", value: 5, type: 3, properties: ["arg-received?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
-mem/0: location 1016 is 1
-run/0: ingredient 0 is 1
-run/0: jump-unless fell through
-run/0: instruction interpolate/7
-run/0: {name: "a-len", value: 6, type: 1, properties: ["a-len": "integer"]} <- length/28 {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}
-mem/0: location 1015 is 1006
-mem/0: storing 3 in location 1017
-run/0: instruction interpolate/8
-run/0: {name: "result-len", value: 3, type: 1, properties: ["result-len": "integer"]} <- add/2 {name: "result-len", value: 3, type: 1, properties: ["result-len": "integer"]}, {name: "a-len", value: 6, type: 1, properties: ["a-len": "integer"]}
-run/0: ingredient 0 is result-len
-mem/0: location 1014 is 5
-run/0: ingredient 1 is a-len
-mem/0: location 1017 is 3
-run/0: product 0 is 8
-mem/0: storing 8 in location 1014
-run/0: instruction interpolate/9
-run/0: {name: "result-len", value: 3, type: 1, properties: ["result-len": "integer"]} <- subtract/3 {name: "result-len", value: 3, type: 1, properties: ["result-len": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is result-len
-mem/0: location 1014 is 8
-run/0: ingredient 1 is 1
-run/0: product 0 is 7
-mem/0: storing 7 in location 1014
-run/0: instruction interpolate/10
-run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
-run/0: ingredient 0 is -6
-run/0: jumping to instruction 5
-run/0: instruction interpolate/5
-run/0: {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character"]}, {name: "arg-received?", value: 5, type: 3, properties: ["arg-received?": "boolean"]} <- next-ingredient/30 
-mem/0: storing 0 in location 1016
-run/0: instruction interpolate/6
-run/0: break-unless/12 {name: "arg-received?", value: 5, type: 3, properties: ["arg-received?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
-mem/0: location 1016 is 0
-run/0: ingredient 0 is 0
-run/0: ingredient 1 is 
-run/0: jumping to instruction 11
-run/0: instruction interpolate/12
-run/0: rewind-ingredients/31 
-run/0: instruction interpolate/13
-run/0: {name: "_", value: 0, type: 0, properties: ["_": "dummy"]} <- next-ingredient/30 
-run/0: product 0 is 1000
-run/0: instruction interpolate/14
-run/0: {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character"]} <- new/44 {name: "character", value: 4, type: 0, properties: ["character": "type"]}, {name: "result-len", value: 3, type: 1, properties: ["result-len": "integer"]}
-mem/0: location 1014 is 7
-mem/0: array size is 7
-mem/0: new alloc: 1071
-mem/0: storing 1071 in location 1018
-run/0: instruction interpolate/15
-run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
-mem/0: storing 0 in location 1019
-run/0: instruction interpolate/16
-run/0: {name: "i", value: 9, type: 1, properties: ["i": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
-mem/0: storing 0 in location 1020
-run/0: instruction interpolate/18
-run/0: {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character"]}, {name: "arg-received?", value: 5, type: 3, properties: ["arg-received?": "boolean"]} <- next-ingredient/30 
-run/0: product 0 is 1006
-mem/0: storing 1006 in location 1015
-mem/0: storing 1 in location 1016
-run/0: instruction interpolate/19
-run/0: break-unless/12 {name: "arg-received?", value: 5, type: 3, properties: ["arg-received?": "boolean"]}, {name: "", value: 25, type: , properties: ["": ]}
-mem/0: location 1016 is 1
-run/0: ingredient 0 is 1
-run/0: jump-unless fell through
-run/0: instruction interpolate/21
-run/0: {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1020 is 0
-run/0: ingredient 1 is tem-len
-mem/0: location 1013 is 5
-run/0: product 0 is 0
-mem/0: storing 0 in location 1021
-run/0: instruction interpolate/22
-run/0: break-if/11 {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]}, {name: "2", value: 2, type: 0, properties: ["2": "blocks"]}
-mem/0: location 1021 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction interpolate/23
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/26 {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}, {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}
-mem/0: location 1012 is 1000
-run/0: ingredient 1 is {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
-mem/0: location 1020 is 0
-run/0: address to copy is 1001
-run/0: its type is 4
-mem/0: location 1001 is 97
-run/0: product 0 is 97
-mem/0: storing 97 in location 1022
-run/0: instruction interpolate/24
-run/0: {name: "underscore?", value: 12, type: 3, properties: ["underscore?": "boolean"]} <- equal/13 {name: "in", value: 11, type: 4, properties: ["in": "character"]}, {name: "95", value: 95, type: 0, properties: ["95": "literal"]}
-run/0: ingredient 0 is in
-mem/0: location 1022 is 97
-run/0: ingredient 1 is 95
-run/0: product 0 is 0
-mem/0: storing 0 in location 1023
-run/0: instruction interpolate/25
-run/0: break-if/11 {name: "underscore?", value: 12, type: 3, properties: ["underscore?": "boolean"]}, {name: "", value: 5, type: , properties: ["": ]}
-mem/0: location 1023 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction interpolate/26
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character"]} <- index-address/27 {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
-run/0: ingredient 0 is result
-mem/0: location 1018 is 1071
-run/0: ingredient 1 is {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
-mem/0: location 1019 is 0
-run/0: address to copy is 1072
-run/0: product 0 is 1072
-mem/0: storing 1072 in location 1024
-run/0: instruction interpolate/27
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy/1 {name: "in", value: 11, type: 4, properties: ["in": "character"]}
-run/0: ingredient 0 is in
-mem/0: location 1022 is 97
-mem/0: location 1024 is 1072
-mem/0: storing 97 in location 1072
-run/0: instruction interpolate/28
-run/0: {name: "i", value: 9, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1020 is 0
-run/0: ingredient 1 is 1
-run/0: product 0 is 1
-mem/0: storing 1 in location 1020
-run/0: instruction interpolate/29
-run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- add/2 {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is result-idx
-mem/0: location 1019 is 0
-run/0: ingredient 1 is 1
-run/0: product 0 is 1
-mem/0: storing 1 in location 1019
-run/0: instruction interpolate/30
-run/0: loop/10 {name: "", value: -10, type: , properties: ["": ]}
-run/0: ingredient 0 is -10
-run/0: jumping to instruction 21
-run/0: instruction interpolate/21
-run/0: {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1020 is 1
-run/0: ingredient 1 is tem-len
-mem/0: location 1013 is 5
-run/0: product 0 is 0
-mem/0: storing 0 in location 1021
-run/0: instruction interpolate/22
-run/0: break-if/11 {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]}, {name: "2", value: 2, type: 0, properties: ["2": "blocks"]}
-mem/0: location 1021 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction interpolate/23
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/26 {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}, {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}
-mem/0: location 1012 is 1000
-run/0: ingredient 1 is {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
-mem/0: location 1020 is 1
-run/0: address to copy is 1002
-run/0: its type is 4
-mem/0: location 1002 is 98
-run/0: product 0 is 98
-mem/0: storing 98 in location 1022
-run/0: instruction interpolate/24
-run/0: {name: "underscore?", value: 12, type: 3, properties: ["underscore?": "boolean"]} <- equal/13 {name: "in", value: 11, type: 4, properties: ["in": "character"]}, {name: "95", value: 95, type: 0, properties: ["95": "literal"]}
-run/0: ingredient 0 is in
-mem/0: location 1022 is 98
-run/0: ingredient 1 is 95
-run/0: product 0 is 0
-mem/0: storing 0 in location 1023
-run/0: instruction interpolate/25
-run/0: break-if/11 {name: "underscore?", value: 12, type: 3, properties: ["underscore?": "boolean"]}, {name: "", value: 5, type: , properties: ["": ]}
-mem/0: location 1023 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction interpolate/26
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character"]} <- index-address/27 {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
-run/0: ingredient 0 is result
-mem/0: location 1018 is 1071
-run/0: ingredient 1 is {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
-mem/0: location 1019 is 1
-run/0: address to copy is 1073
-run/0: product 0 is 1073
-mem/0: storing 1073 in location 1024
-run/0: instruction interpolate/27
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy/1 {name: "in", value: 11, type: 4, properties: ["in": "character"]}
-run/0: ingredient 0 is in
-mem/0: location 1022 is 98
-mem/0: location 1024 is 1073
-mem/0: storing 98 in location 1073
-run/0: instruction interpolate/28
-run/0: {name: "i", value: 9, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1020 is 1
-run/0: ingredient 1 is 1
-run/0: product 0 is 2
-mem/0: storing 2 in location 1020
-run/0: instruction interpolate/29
-run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- add/2 {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is result-idx
-mem/0: location 1019 is 1
-run/0: ingredient 1 is 1
-run/0: product 0 is 2
-mem/0: storing 2 in location 1019
-run/0: instruction interpolate/30
-run/0: loop/10 {name: "", value: -10, type: , properties: ["": ]}
-run/0: ingredient 0 is -10
-run/0: jumping to instruction 21
-run/0: instruction interpolate/21
-run/0: {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1020 is 2
-run/0: ingredient 1 is tem-len
-mem/0: location 1013 is 5
-run/0: product 0 is 0
-mem/0: storing 0 in location 1021
-run/0: instruction interpolate/22
-run/0: break-if/11 {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]}, {name: "2", value: 2, type: 0, properties: ["2": "blocks"]}
-mem/0: location 1021 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction interpolate/23
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/26 {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}, {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}
-mem/0: location 1012 is 1000
-run/0: ingredient 1 is {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
-mem/0: location 1020 is 2
-run/0: address to copy is 1003
-run/0: its type is 4
-mem/0: location 1003 is 99
-run/0: product 0 is 99
-mem/0: storing 99 in location 1022
-run/0: instruction interpolate/24
-run/0: {name: "underscore?", value: 12, type: 3, properties: ["underscore?": "boolean"]} <- equal/13 {name: "in", value: 11, type: 4, properties: ["in": "character"]}, {name: "95", value: 95, type: 0, properties: ["95": "literal"]}
-run/0: ingredient 0 is in
-mem/0: location 1022 is 99
-run/0: ingredient 1 is 95
-run/0: product 0 is 0
-mem/0: storing 0 in location 1023
-run/0: instruction interpolate/25
-run/0: break-if/11 {name: "underscore?", value: 12, type: 3, properties: ["underscore?": "boolean"]}, {name: "", value: 5, type: , properties: ["": ]}
-mem/0: location 1023 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction interpolate/26
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character"]} <- index-address/27 {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
-run/0: ingredient 0 is result
-mem/0: location 1018 is 1071
-run/0: ingredient 1 is {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
-mem/0: location 1019 is 2
-run/0: address to copy is 1074
-run/0: product 0 is 1074
-mem/0: storing 1074 in location 1024
-run/0: instruction interpolate/27
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy/1 {name: "in", value: 11, type: 4, properties: ["in": "character"]}
-run/0: ingredient 0 is in
-mem/0: location 1022 is 99
-mem/0: location 1024 is 1074
-mem/0: storing 99 in location 1074
-run/0: instruction interpolate/28
-run/0: {name: "i", value: 9, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1020 is 2
-run/0: ingredient 1 is 1
-run/0: product 0 is 3
-mem/0: storing 3 in location 1020
-run/0: instruction interpolate/29
-run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- add/2 {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is result-idx
-mem/0: location 1019 is 2
-run/0: ingredient 1 is 1
-run/0: product 0 is 3
-mem/0: storing 3 in location 1019
-run/0: instruction interpolate/30
-run/0: loop/10 {name: "", value: -10, type: , properties: ["": ]}
-run/0: ingredient 0 is -10
-run/0: jumping to instruction 21
-run/0: instruction interpolate/21
-run/0: {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1020 is 3
-run/0: ingredient 1 is tem-len
-mem/0: location 1013 is 5
-run/0: product 0 is 0
-mem/0: storing 0 in location 1021
-run/0: instruction interpolate/22
-run/0: break-if/11 {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]}, {name: "2", value: 2, type: 0, properties: ["2": "blocks"]}
-mem/0: location 1021 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction interpolate/23
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/26 {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}, {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}
-mem/0: location 1012 is 1000
-run/0: ingredient 1 is {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
-mem/0: location 1020 is 3
-run/0: address to copy is 1004
-run/0: its type is 4
-mem/0: location 1004 is 32
-run/0: product 0 is 32
-mem/0: storing 32 in location 1022
-run/0: instruction interpolate/24
-run/0: {name: "underscore?", value: 12, type: 3, properties: ["underscore?": "boolean"]} <- equal/13 {name: "in", value: 11, type: 4, properties: ["in": "character"]}, {name: "95", value: 95, type: 0, properties: ["95": "literal"]}
-run/0: ingredient 0 is in
-mem/0: location 1022 is 32
-run/0: ingredient 1 is 95
-run/0: product 0 is 0
-mem/0: storing 0 in location 1023
-run/0: instruction interpolate/25
-run/0: break-if/11 {name: "underscore?", value: 12, type: 3, properties: ["underscore?": "boolean"]}, {name: "", value: 5, type: , properties: ["": ]}
-mem/0: location 1023 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction interpolate/26
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character"]} <- index-address/27 {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
-run/0: ingredient 0 is result
-mem/0: location 1018 is 1071
-run/0: ingredient 1 is {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
-mem/0: location 1019 is 3
-run/0: address to copy is 1075
-run/0: product 0 is 1075
-mem/0: storing 1075 in location 1024
-run/0: instruction interpolate/27
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy/1 {name: "in", value: 11, type: 4, properties: ["in": "character"]}
-run/0: ingredient 0 is in
-mem/0: location 1022 is 32
-mem/0: location 1024 is 1075
-mem/0: storing 32 in location 1075
-run/0: instruction interpolate/28
-run/0: {name: "i", value: 9, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1020 is 3
-run/0: ingredient 1 is 1
-run/0: product 0 is 4
-mem/0: storing 4 in location 1020
-run/0: instruction interpolate/29
-run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- add/2 {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is result-idx
-mem/0: location 1019 is 3
-run/0: ingredient 1 is 1
-run/0: product 0 is 4
-mem/0: storing 4 in location 1019
-run/0: instruction interpolate/30
-run/0: loop/10 {name: "", value: -10, type: , properties: ["": ]}
-run/0: ingredient 0 is -10
-run/0: jumping to instruction 21
-run/0: instruction interpolate/21
-run/0: {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1020 is 4
-run/0: ingredient 1 is tem-len
-mem/0: location 1013 is 5
-run/0: product 0 is 0
-mem/0: storing 0 in location 1021
-run/0: instruction interpolate/22
-run/0: break-if/11 {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]}, {name: "2", value: 2, type: 0, properties: ["2": "blocks"]}
-mem/0: location 1021 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction interpolate/23
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/26 {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}, {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}
-mem/0: location 1012 is 1000
-run/0: ingredient 1 is {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
-mem/0: location 1020 is 4
-run/0: address to copy is 1005
-run/0: its type is 4
-mem/0: location 1005 is 95
-run/0: product 0 is 95
-mem/0: storing 95 in location 1022
-run/0: instruction interpolate/24
-run/0: {name: "underscore?", value: 12, type: 3, properties: ["underscore?": "boolean"]} <- equal/13 {name: "in", value: 11, type: 4, properties: ["in": "character"]}, {name: "95", value: 95, type: 0, properties: ["95": "literal"]}
-run/0: ingredient 0 is in
-mem/0: location 1022 is 95
-run/0: ingredient 1 is 95
-run/0: product 0 is 1
-mem/0: storing 1 in location 1023
-run/0: instruction interpolate/25
-run/0: break-if/11 {name: "underscore?", value: 12, type: 3, properties: ["underscore?": "boolean"]}, {name: "", value: 5, type: , properties: ["": ]}
-mem/0: location 1023 is 1
-run/0: ingredient 0 is 1
-run/0: ingredient 1 is 
-run/0: jumping to instruction 31
-run/0: instruction interpolate/32
-run/0: {name: "j", value: 14, type: 1, properties: ["j": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
-mem/0: storing 0 in location 1025
-run/0: instruction interpolate/34
-run/0: {name: "arg-done?", value: 15, type: 3, properties: ["arg-done?": "boolean"]} <- greater-or-equal/16 {name: "j", value: 14, type: 1, properties: ["j": "integer"]}, {name: "a-len", value: 6, type: 1, properties: ["a-len": "integer"]}
-run/0: ingredient 0 is j
-mem/0: location 1025 is 0
-run/0: ingredient 1 is a-len
-mem/0: location 1017 is 3
-run/0: product 0 is 0
-mem/0: storing 0 in location 1026
-run/0: instruction interpolate/35
-run/0: break-if/11 {name: "arg-done?", value: 15, type: 3, properties: ["arg-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
-mem/0: location 1026 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction interpolate/36
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/26 {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}, {name: "j", value: 14, type: 1, properties: ["j": "integer"]}
-run/0: ingredient 0 is {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}
-mem/0: location 1015 is 1006
-run/0: ingredient 1 is {name: "j", value: 14, type: 1, properties: ["j": "integer"]}
-mem/0: location 1025 is 0
-run/0: address to copy is 1007
-run/0: its type is 4
-mem/0: location 1007 is 100
-run/0: product 0 is 100
-mem/0: storing 100 in location 1022
-run/0: instruction interpolate/37
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character"]} <- index-address/27 {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
-run/0: ingredient 0 is result
-mem/0: location 1018 is 1071
-run/0: ingredient 1 is {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
-mem/0: location 1019 is 4
-run/0: address to copy is 1076
-run/0: product 0 is 1076
-mem/0: storing 1076 in location 1024
-run/0: instruction interpolate/38
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy/1 {name: "in", value: 11, type: 4, properties: ["in": "character"]}
-run/0: ingredient 0 is in
-mem/0: location 1022 is 100
-mem/0: location 1024 is 1076
-mem/0: storing 100 in location 1076
-run/0: instruction interpolate/39
-run/0: {name: "j", value: 14, type: 1, properties: ["j": "integer"]} <- add/2 {name: "j", value: 14, type: 1, properties: ["j": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is j
-mem/0: location 1025 is 0
-run/0: ingredient 1 is 1
-run/0: product 0 is 1
-mem/0: storing 1 in location 1025
-run/0: instruction interpolate/40
-run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- add/2 {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is result-idx
-mem/0: location 1019 is 4
-run/0: ingredient 1 is 1
-run/0: product 0 is 5
-mem/0: storing 5 in location 1019
-run/0: instruction interpolate/41
-run/0: loop/10 {name: "", value: -8, type: , properties: ["": ]}
-run/0: ingredient 0 is -8
-run/0: jumping to instruction 34
-run/0: instruction interpolate/34
-run/0: {name: "arg-done?", value: 15, type: 3, properties: ["arg-done?": "boolean"]} <- greater-or-equal/16 {name: "j", value: 14, type: 1, properties: ["j": "integer"]}, {name: "a-len", value: 6, type: 1, properties: ["a-len": "integer"]}
-run/0: ingredient 0 is j
-mem/0: location 1025 is 1
-run/0: ingredient 1 is a-len
-mem/0: location 1017 is 3
-run/0: product 0 is 0
-mem/0: storing 0 in location 1026
-run/0: instruction interpolate/35
-run/0: break-if/11 {name: "arg-done?", value: 15, type: 3, properties: ["arg-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
-mem/0: location 1026 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction interpolate/36
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/26 {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}, {name: "j", value: 14, type: 1, properties: ["j": "integer"]}
-run/0: ingredient 0 is {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}
-mem/0: location 1015 is 1006
-run/0: ingredient 1 is {name: "j", value: 14, type: 1, properties: ["j": "integer"]}
-mem/0: location 1025 is 1
-run/0: address to copy is 1008
-run/0: its type is 4
-mem/0: location 1008 is 101
-run/0: product 0 is 101
-mem/0: storing 101 in location 1022
-run/0: instruction interpolate/37
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character"]} <- index-address/27 {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
-run/0: ingredient 0 is result
-mem/0: location 1018 is 1071
-run/0: ingredient 1 is {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
-mem/0: location 1019 is 5
-run/0: address to copy is 1077
-run/0: product 0 is 1077
-mem/0: storing 1077 in location 1024
-run/0: instruction interpolate/38
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy/1 {name: "in", value: 11, type: 4, properties: ["in": "character"]}
-run/0: ingredient 0 is in
-mem/0: location 1022 is 101
-mem/0: location 1024 is 1077
-mem/0: storing 101 in location 1077
-run/0: instruction interpolate/39
-run/0: {name: "j", value: 14, type: 1, properties: ["j": "integer"]} <- add/2 {name: "j", value: 14, type: 1, properties: ["j": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is j
-mem/0: location 1025 is 1
-run/0: ingredient 1 is 1
-run/0: product 0 is 2
-mem/0: storing 2 in location 1025
-run/0: instruction interpolate/40
-run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- add/2 {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is result-idx
-mem/0: location 1019 is 5
-run/0: ingredient 1 is 1
-run/0: product 0 is 6
-mem/0: storing 6 in location 1019
-run/0: instruction interpolate/41
-run/0: loop/10 {name: "", value: -8, type: , properties: ["": ]}
-run/0: ingredient 0 is -8
-run/0: jumping to instruction 34
-run/0: instruction interpolate/34
-run/0: {name: "arg-done?", value: 15, type: 3, properties: ["arg-done?": "boolean"]} <- greater-or-equal/16 {name: "j", value: 14, type: 1, properties: ["j": "integer"]}, {name: "a-len", value: 6, type: 1, properties: ["a-len": "integer"]}
-run/0: ingredient 0 is j
-mem/0: location 1025 is 2
-run/0: ingredient 1 is a-len
-mem/0: location 1017 is 3
-run/0: product 0 is 0
-mem/0: storing 0 in location 1026
-run/0: instruction interpolate/35
-run/0: break-if/11 {name: "arg-done?", value: 15, type: 3, properties: ["arg-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
-mem/0: location 1026 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction interpolate/36
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/26 {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}, {name: "j", value: 14, type: 1, properties: ["j": "integer"]}
-run/0: ingredient 0 is {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}
-mem/0: location 1015 is 1006
-run/0: ingredient 1 is {name: "j", value: 14, type: 1, properties: ["j": "integer"]}
-mem/0: location 1025 is 2
-run/0: address to copy is 1009
-run/0: its type is 4
-mem/0: location 1009 is 102
-run/0: product 0 is 102
-mem/0: storing 102 in location 1022
-run/0: instruction interpolate/37
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character"]} <- index-address/27 {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
-run/0: ingredient 0 is result
-mem/0: location 1018 is 1071
-run/0: ingredient 1 is {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
-mem/0: location 1019 is 6
-run/0: address to copy is 1078
-run/0: product 0 is 1078
-mem/0: storing 1078 in location 1024
-run/0: instruction interpolate/38
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy/1 {name: "in", value: 11, type: 4, properties: ["in": "character"]}
-run/0: ingredient 0 is in
-mem/0: location 1022 is 102
-mem/0: location 1024 is 1078
-mem/0: storing 102 in location 1078
-run/0: instruction interpolate/39
-run/0: {name: "j", value: 14, type: 1, properties: ["j": "integer"]} <- add/2 {name: "j", value: 14, type: 1, properties: ["j": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is j
-mem/0: location 1025 is 2
-run/0: ingredient 1 is 1
-run/0: product 0 is 3
-mem/0: storing 3 in location 1025
-run/0: instruction interpolate/40
-run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- add/2 {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is result-idx
-mem/0: location 1019 is 6
-run/0: ingredient 1 is 1
-run/0: product 0 is 7
-mem/0: storing 7 in location 1019
-run/0: instruction interpolate/41
-run/0: loop/10 {name: "", value: -8, type: , properties: ["": ]}
-run/0: ingredient 0 is -8
-run/0: jumping to instruction 34
-run/0: instruction interpolate/34
-run/0: {name: "arg-done?", value: 15, type: 3, properties: ["arg-done?": "boolean"]} <- greater-or-equal/16 {name: "j", value: 14, type: 1, properties: ["j": "integer"]}, {name: "a-len", value: 6, type: 1, properties: ["a-len": "integer"]}
-run/0: ingredient 0 is j
-mem/0: location 1025 is 3
-run/0: ingredient 1 is a-len
-mem/0: location 1017 is 3
-run/0: product 0 is 1
-mem/0: storing 1 in location 1026
-run/0: instruction interpolate/35
-run/0: break-if/11 {name: "arg-done?", value: 15, type: 3, properties: ["arg-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
-mem/0: location 1026 is 1
-run/0: ingredient 0 is 1
-run/0: ingredient 1 is 
-run/0: jumping to instruction 42
-run/0: instruction interpolate/43
-run/0: {name: "i", value: 9, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1020 is 4
-run/0: ingredient 1 is 1
-run/0: product 0 is 5
-mem/0: storing 5 in location 1020
-run/0: instruction interpolate/44
-run/0: loop/10 {name: "", value: -27, type: , properties: ["": ]}
-run/0: ingredient 0 is -27
-run/0: jumping to instruction 18
-run/0: instruction interpolate/18
-run/0: {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character"]}, {name: "arg-received?", value: 5, type: 3, properties: ["arg-received?": "boolean"]} <- next-ingredient/30 
-mem/0: storing 0 in location 1016
-run/0: instruction interpolate/19
-run/0: break-unless/12 {name: "arg-received?", value: 5, type: 3, properties: ["arg-received?": "boolean"]}, {name: "", value: 25, type: , properties: ["": ]}
-mem/0: location 1016 is 0
-run/0: ingredient 0 is 0
-run/0: ingredient 1 is 
-run/0: jumping to instruction 45
-run/0: instruction interpolate/47
-run/0: {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1020 is 5
-run/0: ingredient 1 is tem-len
-mem/0: location 1013 is 5
-run/0: product 0 is 1
-mem/0: storing 1 in location 1021
-run/0: instruction interpolate/48
-run/0: break-if/11 {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
-mem/0: location 1021 is 1
-run/0: ingredient 0 is 1
-run/0: ingredient 1 is 
-run/0: jumping to instruction 55
-run/0: instruction interpolate/56
-run/0: reply/33 {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character"]}
-mem/0: location 1018 is 1071
-run/0: result 0 is 1071
-mem/0: storing 1071 in location 3
-run/0: instruction run1001/3
-run/0: {name: "4", value: 4, type: 5-4, properties: ["4": "array":"character", "raw": ]} <- copy/1 {name: "3", value: 3, type: 2-5-4, properties: ["3": "address":"array":"character", "raw": , "deref": ]}
-run/0: ingredient 0 is 3
-mem/0: location 3 is 1071
-mem/0: location 1071 is 7
-mem/0: location 1072 is 97
-mem/0: location 1073 is 98
-mem/0: location 1074 is 99
-mem/0: location 1075 is 32
-mem/0: location 1076 is 100
-mem/0: location 1077 is 101
-mem/0: location 1078 is 102
-mem/0: storing 7 in location 4
-mem/0: storing 97 in location 5
-mem/0: storing 98 in location 6
-mem/0: storing 99 in location 7
-mem/0: storing 32 in location 8
-mem/0: storing 100 in location 9
-mem/0: storing 101 in location 10
-mem/0: storing 102 in location 11
-run/0: instruction interpolate-works/1
-run/0: memory-should-contain/46 {name: "
-    4:string <- [abc def]
-  ", value: 0, type: 0, properties: ["
-    4:string <- [abc def]
-  ": "literal-string"]}
-run/0: checking string length at 4
-run/0: checking location 5
-run/0: checking location 6
-run/0: checking location 7
-run/0: checking location 8
-run/0: checking location 9
-run/0: checking location 10
-run/0: checking location 11
diff --git a/cpp/.traces/jump_backward b/cpp/.traces/jump_backward
deleted file mode 100644
index 4c652f4e..00000000
--- a/cpp/.traces/jump_backward
+++ /dev/null
@@ -1,24 +0,0 @@
-parse/0: instruction: jump
-parse/0:   ingredient: {name: "1", value: 0, type: 0, properties: ["1": "offset"]}
-parse/0: instruction: jump
-parse/0:   ingredient: {name: "1", value: 0, type: 0, properties: ["1": "offset"]}
-parse/0: instruction: jump
-parse/0:   ingredient: {name: "-2", value: 0, type: 0, properties: ["-2": "offset"]}
-after-brace/0: recipe main
-after-brace/0: jump ...
-after-brace/0: jump ...
-after-brace/0: jump ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: jump/10 {name: "1", value: 1, type: 0, properties: ["1": "offset"]}
-run/0: ingredient 0 is 1
-run/0: jumping to instruction 2
-run/0: instruction main/2
-run/0: jump/10 {name: "-2", value: -2, type: 0, properties: ["-2": "offset"]}
-run/0: ingredient 0 is -2
-run/0: jumping to instruction 1
-run/0: instruction main/1
-run/0: jump/10 {name: "1", value: 1, type: 0, properties: ["1": "offset"]}
-run/0: ingredient 0 is 1
-run/0: jumping to instruction 3
diff --git a/cpp/.traces/jump_can_skip_instructions b/cpp/.traces/jump_can_skip_instructions
deleted file mode 100644
index ce915fa0..00000000
--- a/cpp/.traces/jump_can_skip_instructions
+++ /dev/null
@@ -1,14 +0,0 @@
-parse/0: instruction: jump
-parse/0:   ingredient: {name: "1", value: 0, type: 0, properties: ["1": "offset"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "1", value: 0, type: 0, properties: ["1": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-after-brace/0: recipe main
-after-brace/0: jump ...
-after-brace/0: copy ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: jump/10 {name: "1", value: 1, type: 0, properties: ["1": "offset"]}
-run/0: ingredient 0 is 1
-run/0: jumping to instruction 2
diff --git a/cpp/.traces/jump_if b/cpp/.traces/jump_if
deleted file mode 100644
index cea3c4f8..00000000
--- a/cpp/.traces/jump_if
+++ /dev/null
@@ -1,16 +0,0 @@
-parse/0: instruction: jump-if
-parse/0:   ingredient: {name: "999", value: 0, type: 0, properties: ["999": "literal"]}
-parse/0:   ingredient: {name: "1", value: 0, type: 0, properties: ["1": "offset"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "1", value: 0, type: 0, properties: ["1": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-after-brace/0: recipe main
-after-brace/0: jump-if ...
-after-brace/0: copy ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: jump-if/11 {name: "999", value: 999, type: 0, properties: ["999": "literal"]}, {name: "1", value: 1, type: 0, properties: ["1": "offset"]}
-run/0: ingredient 0 is 999
-run/0: ingredient 1 is 1
-run/0: jumping to instruction 2
diff --git a/cpp/.traces/jump_if_fallthrough b/cpp/.traces/jump_if_fallthrough
deleted file mode 100644
index c5404292..00000000
--- a/cpp/.traces/jump_if_fallthrough
+++ /dev/null
@@ -1,19 +0,0 @@
-parse/0: instruction: jump-if
-parse/0:   ingredient: {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-parse/0:   ingredient: {name: "1", value: 0, type: 0, properties: ["1": "offset"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "1", value: 0, type: 0, properties: ["1": "literal"]}
-parse/0:   product: {name: "123", value: 0, type: 1, properties: ["123": "integer"]}
-after-brace/0: recipe main
-after-brace/0: jump-if ...
-after-brace/0: copy ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: jump-if/11 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}, {name: "1", value: 1, type: 0, properties: ["1": "offset"]}
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction main/1
-run/0: {name: "123", value: 123, type: 1, properties: ["123": "integer"]} <- copy/1 {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is 1
-mem/0: storing 1 in location 123
diff --git a/cpp/.traces/jump_unless b/cpp/.traces/jump_unless
deleted file mode 100644
index fb015b69..00000000
--- a/cpp/.traces/jump_unless
+++ /dev/null
@@ -1,16 +0,0 @@
-parse/0: instruction: jump-unless
-parse/0:   ingredient: {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-parse/0:   ingredient: {name: "1", value: 0, type: 0, properties: ["1": "offset"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "1", value: 0, type: 0, properties: ["1": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-after-brace/0: recipe main
-after-brace/0: jump-unless ...
-after-brace/0: copy ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: jump-unless/12 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}, {name: "1", value: 1, type: 0, properties: ["1": "offset"]}
-run/0: ingredient 0 is 0
-run/0: ingredient 1 is 1
-run/0: jumping to instruction 2
diff --git a/cpp/.traces/jump_unless_fallthrough b/cpp/.traces/jump_unless_fallthrough
deleted file mode 100644
index f9c4b840..00000000
--- a/cpp/.traces/jump_unless_fallthrough
+++ /dev/null
@@ -1,19 +0,0 @@
-parse/0: instruction: jump-unless
-parse/0:   ingredient: {name: "999", value: 0, type: 0, properties: ["999": "literal"]}
-parse/0:   ingredient: {name: "1", value: 0, type: 0, properties: ["1": "offset"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "1", value: 0, type: 0, properties: ["1": "literal"]}
-parse/0:   product: {name: "123", value: 0, type: 1, properties: ["123": "integer"]}
-after-brace/0: recipe main
-after-brace/0: jump-unless ...
-after-brace/0: copy ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: jump-unless/12 {name: "999", value: 999, type: 0, properties: ["999": "literal"]}, {name: "1", value: 1, type: 0, properties: ["1": "offset"]}
-run/0: ingredient 0 is 999
-run/0: jump-unless fell through
-run/0: instruction main/1
-run/0: {name: "123", value: 123, type: 1, properties: ["123": "integer"]} <- copy/1 {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is 1
-mem/0: storing 1 in location 123
diff --git a/cpp/.traces/keyboard_in_scenario b/cpp/.traces/keyboard_in_scenario
deleted file mode 100644
index f71bfacc..00000000
--- a/cpp/.traces/keyboard_in_scenario
+++ /dev/null
@@ -1,465 +0,0 @@
-parse/0: instruction: assume-keyboard
-parse/0:   ingredient: {name: "abc", value: 0, type: 0, properties: ["abc": "literal-string"]}
-parse/0: instruction: run
-parse/0:   ingredient: {name: "
-    1:character, 2:boolean, keyboard:address <- read-key keyboard:address
-    3:character, 4:boolean, keyboard:address <- read-key keyboard:address
-    5:character, 6:boolean, keyboard:address <- read-key keyboard:address
-    7:character, 8:boolean, keyboard:address <- read-key keyboard:address
-  ", value: 0, type: 0, properties: ["
-    1:character, 2:boolean, keyboard:address <- read-key keyboard:address
-    3:character, 4:boolean, keyboard:address <- read-key keyboard:address
-    5:character, 6:boolean, keyboard:address <- read-key keyboard:address
-    7:character, 8:boolean, keyboard:address <- read-key keyboard:address
-  ": "literal-string"]}
-parse/0: instruction: memory-should-contain
-parse/0:   ingredient: {name: "
-    1 <- 97  # 'a'
-    2 <- 1  # first read-key call found a character
-    3 <- 98  # 'b'
-    4 <- 1  # second read-key call found a character
-    5 <- 99  # 'c'
-    6 <- 1  # third read-key call found a character
-    7 <- 0
-    8 <- 0  # fourth read-key call didn't find a character
-  ", value: 0, type: 0, properties: ["
-    1 <- 97  # 'a'
-    2 <- 1  # first read-key call found a character
-    3 <- 98  # 'b'
-    4 <- 1  # second read-key call found a character
-    5 <- 99  # 'c'
-    6 <- 1  # third read-key call found a character
-    7 <- 0
-    8 <- 0  # fourth read-key call didn't find a character
-  ": "literal-string"]}
-new/0: abc -> 0
-after-brace/0: recipe keyboard-in-scenario
-after-brace/0: assume-keyboard ...
-after-brace/0: assume-keyboard ...
-after-brace/0: run ...
-after-brace/0: memory-should-contain ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: keyboard-in-scenario
-run/0: instruction keyboard-in-scenario/0
-run/0: {name: "keyboard", value: 901, type: 2, properties: ["keyboard": "address"]} <- assume-keyboard/44 {name: "abc", value: 0, type: 0, properties: ["abc": "literal-string"]}
-mem/0: storing 1000 in location 901
-run/0: instruction keyboard-in-scenario/1
-run/0: {name: "keyboard", value: 901, type: 2, properties: ["keyboard": "address"]} <- assume-keyboard/125 {name: "keyboard", value: 901, type: 2, properties: ["keyboard": "address"]}
-mem/0: location 901 is 1000
-run/0: instruction init-fake-keyboard/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1004
-run/0: instruction init-fake-keyboard/1
-run/0: {name: "result", value: 1, type: 2-12, properties: ["result": "address":"keyboard"]} <- new/44 {name: "keyboard", value: 12, type: 0, properties: ["keyboard": "type"]}
-mem/0: new alloc: 1035
-mem/0: storing 1035 in location 1006
-run/0: instruction init-fake-keyboard/2
-run/0: {name: "buf", value: 2, type: 2-2-5-4, properties: ["buf": "address":"address":"array":"character"]} <- get-address/25 {name: "result", value: 1, type: 2-12, properties: ["result": "address":"keyboard", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is result
-mem/0: location 1006 is 1035
-run/0: ingredient 1 is data
-run/0: address to copy is 1036
-run/0: product 0 is 1036
-mem/0: storing 1036 in location 1007
-run/0: instruction init-fake-keyboard/3
-run/0: {name: "buf", value: 2, type: 2-2-5-4, properties: ["buf": "address":"address":"array":"character", "deref": ]} <- next-ingredient/30 
-run/0: product 0 is 1000
-mem/0: location 1007 is 1036
-mem/0: storing 1000 in location 1036
-run/0: instruction init-fake-keyboard/4
-run/0: {name: "idx", value: 3, type: 2-1, properties: ["idx": "address":"integer"]} <- get-address/25 {name: "result", value: 1, type: 2-12, properties: ["result": "address":"keyboard", "deref": ]}, {name: "index", value: 0, type: 0, properties: ["index": "offset"]}
-run/0: ingredient 0 is result
-mem/0: location 1006 is 1035
-run/0: ingredient 1 is index
-run/0: address to copy is 1035
-run/0: product 0 is 1035
-mem/0: storing 1035 in location 1008
-run/0: instruction init-fake-keyboard/5
-run/0: {name: "idx", value: 3, type: 2-1, properties: ["idx": "address":"integer", "deref": ]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
-mem/0: location 1008 is 1035
-mem/0: storing 0 in location 1035
-run/0: instruction init-fake-keyboard/6
-run/0: reply/33 {name: "result", value: 1, type: 2-12, properties: ["result": "address":"keyboard"]}
-mem/0: location 1006 is 1035
-run/0: result 0 is 1035
-mem/0: storing 1035 in location 901
-run/0: instruction keyboard-in-scenario/2
-run/0: run/45 {name: "
-    1:character, 2:boolean, keyboard:address <- read-key keyboard:address
-    3:character, 4:boolean, keyboard:address <- read-key keyboard:address
-    5:character, 6:boolean, keyboard:address <- read-key keyboard:address
-    7:character, 8:boolean, keyboard:address <- read-key keyboard:address
-  ", value: 0, type: 0, properties: ["
-    1:character, 2:boolean, keyboard:address <- read-key keyboard:address
-    3:character, 4:boolean, keyboard:address <- read-key keyboard:address
-    5:character, 6:boolean, keyboard:address <- read-key keyboard:address
-    7:character, 8:boolean, keyboard:address <- read-key keyboard:address
-  ": "literal-string"]}
-parse/0: instruction: read-key
-parse/0:   ingredient: {name: "keyboard", value: 0, type: 2, properties: ["keyboard": "address"]}
-parse/0:   product: {name: "1", value: 0, type: 4, properties: ["1": "character"]}
-parse/0:   product: {name: "2", value: 0, type: 3, properties: ["2": "boolean"]}
-parse/0:   product: {name: "keyboard", value: 0, type: 2, properties: ["keyboard": "address"]}
-parse/0: instruction: read-key
-parse/0:   ingredient: {name: "keyboard", value: 0, type: 2, properties: ["keyboard": "address"]}
-parse/0:   product: {name: "3", value: 0, type: 4, properties: ["3": "character"]}
-parse/0:   product: {name: "4", value: 0, type: 3, properties: ["4": "boolean"]}
-parse/0:   product: {name: "keyboard", value: 0, type: 2, properties: ["keyboard": "address"]}
-parse/0: instruction: read-key
-parse/0:   ingredient: {name: "keyboard", value: 0, type: 2, properties: ["keyboard": "address"]}
-parse/0:   product: {name: "5", value: 0, type: 4, properties: ["5": "character"]}
-parse/0:   product: {name: "6", value: 0, type: 3, properties: ["6": "boolean"]}
-parse/0:   product: {name: "keyboard", value: 0, type: 2, properties: ["keyboard": "address"]}
-parse/0: instruction: read-key
-parse/0:   ingredient: {name: "keyboard", value: 0, type: 2, properties: ["keyboard": "address"]}
-parse/0:   product: {name: "7", value: 0, type: 4, properties: ["7": "character"]}
-parse/0:   product: {name: "8", value: 0, type: 3, properties: ["8": "boolean"]}
-parse/0:   product: {name: "keyboard", value: 0, type: 2, properties: ["keyboard": "address"]}
-after-brace/0: recipe run1002
-after-brace/0: read-key ...
-after-brace/0: read-key ...
-after-brace/0: read-key ...
-after-brace/0: read-key ...
-run/0: instruction run1002/0
-run/0: {name: "1", value: 1, type: 4, properties: ["1": "character"]}, {name: "2", value: 2, type: 3, properties: ["2": "boolean"]}, {name: "keyboard", value: 901, type: 2, properties: ["keyboard": "address"]} <- read-key/126 {name: "keyboard", value: 901, type: 2, properties: ["keyboard": "address"]}
-mem/0: location 901 is 1035
-run/0: instruction read-key/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1037
-run/0: instruction read-key/1
-run/0: {name: "x", value: 1, type: 2-12, properties: ["x": "address":"keyboard"]} <- next-ingredient/30 
-run/0: product 0 is 1035
-mem/0: storing 1035 in location 1039
-run/0: instruction read-key/3
-run/0: break-unless/12 {name: "x", value: 1, type: 2-12, properties: ["x": "address":"keyboard"]}, {name: "", value: 11, type: , properties: ["": ]}
-mem/0: location 1039 is 1035
-run/0: ingredient 0 is 1035
-run/0: jump-unless fell through
-run/0: instruction read-key/4
-run/0: {name: "idx", value: 2, type: 2-1, properties: ["idx": "address":"integer"]} <- get-address/25 {name: "x", value: 1, type: 2-12, properties: ["x": "address":"keyboard", "deref": ]}, {name: "index", value: 0, type: 0, properties: ["index": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1039 is 1035
-run/0: ingredient 1 is index
-run/0: address to copy is 1035
-run/0: product 0 is 1035
-mem/0: storing 1035 in location 1040
-run/0: instruction read-key/5
-run/0: {name: "buf", value: 3, type: 2-5-4, properties: ["buf": "address":"array":"character"]} <- get/24 {name: "x", value: 1, type: 2-12, properties: ["x": "address":"keyboard", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1039 is 1035
-run/0: ingredient 1 is data
-run/0: address to copy is 1036
-run/0: its type is 2
-mem/0: location 1036 is 1000
-run/0: product 0 is 1000
-mem/0: storing 1000 in location 1041
-run/0: instruction read-key/6
-run/0: {name: "max", value: 4, type: 1, properties: ["max": "integer"]} <- length/28 {name: "buf", value: 3, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}
-mem/0: location 1041 is 1000
-mem/0: storing 3 in location 1042
-run/0: instruction read-key/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "idx", value: 2, type: 2-1, properties: ["idx": "address":"integer", "deref": ]}, {name: "max", value: 4, type: 1, properties: ["max": "integer"]}
-run/0: ingredient 0 is idx
-mem/0: location 1040 is 1035
-mem/0: location 1035 is 0
-run/0: ingredient 1 is max
-mem/0: location 1042 is 3
-run/0: product 0 is 0
-mem/0: storing 0 in location 1043
-run/0: instruction read-key/9
-run/0: break-unless/12 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
-mem/0: location 1043 is 0
-run/0: ingredient 0 is 0
-run/0: ingredient 1 is 
-run/0: jumping to instruction 11
-run/0: instruction read-key/12
-run/0: {name: "c", value: 6, type: 4, properties: ["c": "character"]} <- index/26 {name: "buf", value: 3, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "idx", value: 2, type: 2-1, properties: ["idx": "address":"integer", "deref": ]}
-run/0: ingredient 0 is {name: "buf", value: 3, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}
-mem/0: location 1041 is 1000
-run/0: ingredient 1 is {name: "idx", value: 2, type: 2-1, properties: ["idx": "address":"integer", "deref": ]}
-mem/0: location 1040 is 1035
-mem/0: location 1035 is 0
-run/0: address to copy is 1001
-run/0: its type is 4
-mem/0: location 1001 is 97
-run/0: product 0 is 97
-mem/0: storing 97 in location 1044
-run/0: instruction read-key/13
-run/0: {name: "idx", value: 2, type: 2-1, properties: ["idx": "address":"integer", "deref": ]} <- add/2 {name: "idx", value: 2, type: 2-1, properties: ["idx": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is idx
-mem/0: location 1040 is 1035
-mem/0: location 1035 is 0
-run/0: ingredient 1 is 1
-run/0: product 0 is 1
-mem/0: location 1040 is 1035
-mem/0: storing 1 in location 1035
-run/0: instruction read-key/14
-run/0: reply/33 {name: "c", value: 6, type: 4, properties: ["c": "character"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal", "found": ]}, {name: "x", value: 1, type: 2-12, properties: ["x": "address":"keyboard", "same-as-ingredient": "0"]}
-mem/0: location 1044 is 97
-mem/0: location 1039 is 1035
-run/0: result 0 is 97
-mem/0: storing 97 in location 1
-run/0: result 1 is 1
-mem/0: storing 1 in location 2
-run/0: result 2 is 1035
-mem/0: storing 1035 in location 901
-run/0: instruction run1002/1
-run/0: {name: "3", value: 3, type: 4, properties: ["3": "character"]}, {name: "4", value: 4, type: 3, properties: ["4": "boolean"]}, {name: "keyboard", value: 901, type: 2, properties: ["keyboard": "address"]} <- read-key/126 {name: "keyboard", value: 901, type: 2, properties: ["keyboard": "address"]}
-mem/0: location 901 is 1035
-run/0: instruction read-key/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1068
-run/0: instruction read-key/1
-run/0: {name: "x", value: 1, type: 2-12, properties: ["x": "address":"keyboard"]} <- next-ingredient/30 
-run/0: product 0 is 1035
-mem/0: storing 1035 in location 1070
-run/0: instruction read-key/3
-run/0: break-unless/12 {name: "x", value: 1, type: 2-12, properties: ["x": "address":"keyboard"]}, {name: "", value: 11, type: , properties: ["": ]}
-mem/0: location 1070 is 1035
-run/0: ingredient 0 is 1035
-run/0: jump-unless fell through
-run/0: instruction read-key/4
-run/0: {name: "idx", value: 2, type: 2-1, properties: ["idx": "address":"integer"]} <- get-address/25 {name: "x", value: 1, type: 2-12, properties: ["x": "address":"keyboard", "deref": ]}, {name: "index", value: 0, type: 0, properties: ["index": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1070 is 1035
-run/0: ingredient 1 is index
-run/0: address to copy is 1035
-run/0: product 0 is 1035
-mem/0: storing 1035 in location 1071
-run/0: instruction read-key/5
-run/0: {name: "buf", value: 3, type: 2-5-4, properties: ["buf": "address":"array":"character"]} <- get/24 {name: "x", value: 1, type: 2-12, properties: ["x": "address":"keyboard", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1070 is 1035
-run/0: ingredient 1 is data
-run/0: address to copy is 1036
-run/0: its type is 2
-mem/0: location 1036 is 1000
-run/0: product 0 is 1000
-mem/0: storing 1000 in location 1072
-run/0: instruction read-key/6
-run/0: {name: "max", value: 4, type: 1, properties: ["max": "integer"]} <- length/28 {name: "buf", value: 3, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}
-mem/0: location 1072 is 1000
-mem/0: storing 3 in location 1073
-run/0: instruction read-key/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "idx", value: 2, type: 2-1, properties: ["idx": "address":"integer", "deref": ]}, {name: "max", value: 4, type: 1, properties: ["max": "integer"]}
-run/0: ingredient 0 is idx
-mem/0: location 1071 is 1035
-mem/0: location 1035 is 1
-run/0: ingredient 1 is max
-mem/0: location 1073 is 3
-run/0: product 0 is 0
-mem/0: storing 0 in location 1074
-run/0: instruction read-key/9
-run/0: break-unless/12 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
-mem/0: location 1074 is 0
-run/0: ingredient 0 is 0
-run/0: ingredient 1 is 
-run/0: jumping to instruction 11
-run/0: instruction read-key/12
-run/0: {name: "c", value: 6, type: 4, properties: ["c": "character"]} <- index/26 {name: "buf", value: 3, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "idx", value: 2, type: 2-1, properties: ["idx": "address":"integer", "deref": ]}
-run/0: ingredient 0 is {name: "buf", value: 3, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}
-mem/0: location 1072 is 1000
-run/0: ingredient 1 is {name: "idx", value: 2, type: 2-1, properties: ["idx": "address":"integer", "deref": ]}
-mem/0: location 1071 is 1035
-mem/0: location 1035 is 1
-run/0: address to copy is 1002
-run/0: its type is 4
-mem/0: location 1002 is 98
-run/0: product 0 is 98
-mem/0: storing 98 in location 1075
-run/0: instruction read-key/13
-run/0: {name: "idx", value: 2, type: 2-1, properties: ["idx": "address":"integer", "deref": ]} <- add/2 {name: "idx", value: 2, type: 2-1, properties: ["idx": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is idx
-mem/0: location 1071 is 1035
-mem/0: location 1035 is 1
-run/0: ingredient 1 is 1
-run/0: product 0 is 2
-mem/0: location 1071 is 1035
-mem/0: storing 2 in location 1035
-run/0: instruction read-key/14
-run/0: reply/33 {name: "c", value: 6, type: 4, properties: ["c": "character"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal", "found": ]}, {name: "x", value: 1, type: 2-12, properties: ["x": "address":"keyboard", "same-as-ingredient": "0"]}
-mem/0: location 1075 is 98
-mem/0: location 1070 is 1035
-run/0: result 0 is 98
-mem/0: storing 98 in location 3
-run/0: result 1 is 1
-mem/0: storing 1 in location 4
-run/0: result 2 is 1035
-mem/0: storing 1035 in location 901
-run/0: instruction run1002/2
-run/0: {name: "5", value: 5, type: 4, properties: ["5": "character"]}, {name: "6", value: 6, type: 3, properties: ["6": "boolean"]}, {name: "keyboard", value: 901, type: 2, properties: ["keyboard": "address"]} <- read-key/126 {name: "keyboard", value: 901, type: 2, properties: ["keyboard": "address"]}
-mem/0: location 901 is 1035
-run/0: instruction read-key/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1099
-run/0: instruction read-key/1
-run/0: {name: "x", value: 1, type: 2-12, properties: ["x": "address":"keyboard"]} <- next-ingredient/30 
-run/0: product 0 is 1035
-mem/0: storing 1035 in location 1101
-run/0: instruction read-key/3
-run/0: break-unless/12 {name: "x", value: 1, type: 2-12, properties: ["x": "address":"keyboard"]}, {name: "", value: 11, type: , properties: ["": ]}
-mem/0: location 1101 is 1035
-run/0: ingredient 0 is 1035
-run/0: jump-unless fell through
-run/0: instruction read-key/4
-run/0: {name: "idx", value: 2, type: 2-1, properties: ["idx": "address":"integer"]} <- get-address/25 {name: "x", value: 1, type: 2-12, properties: ["x": "address":"keyboard", "deref": ]}, {name: "index", value: 0, type: 0, properties: ["index": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1101 is 1035
-run/0: ingredient 1 is index
-run/0: address to copy is 1035
-run/0: product 0 is 1035
-mem/0: storing 1035 in location 1102
-run/0: instruction read-key/5
-run/0: {name: "buf", value: 3, type: 2-5-4, properties: ["buf": "address":"array":"character"]} <- get/24 {name: "x", value: 1, type: 2-12, properties: ["x": "address":"keyboard", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1101 is 1035
-run/0: ingredient 1 is data
-run/0: address to copy is 1036
-run/0: its type is 2
-mem/0: location 1036 is 1000
-run/0: product 0 is 1000
-mem/0: storing 1000 in location 1103
-run/0: instruction read-key/6
-run/0: {name: "max", value: 4, type: 1, properties: ["max": "integer"]} <- length/28 {name: "buf", value: 3, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}
-mem/0: location 1103 is 1000
-mem/0: storing 3 in location 1104
-run/0: instruction read-key/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "idx", value: 2, type: 2-1, properties: ["idx": "address":"integer", "deref": ]}, {name: "max", value: 4, type: 1, properties: ["max": "integer"]}
-run/0: ingredient 0 is idx
-mem/0: location 1102 is 1035
-mem/0: location 1035 is 2
-run/0: ingredient 1 is max
-mem/0: location 1104 is 3
-run/0: product 0 is 0
-mem/0: storing 0 in location 1105
-run/0: instruction read-key/9
-run/0: break-unless/12 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
-mem/0: location 1105 is 0
-run/0: ingredient 0 is 0
-run/0: ingredient 1 is 
-run/0: jumping to instruction 11
-run/0: instruction read-key/12
-run/0: {name: "c", value: 6, type: 4, properties: ["c": "character"]} <- index/26 {name: "buf", value: 3, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "idx", value: 2, type: 2-1, properties: ["idx": "address":"integer", "deref": ]}
-run/0: ingredient 0 is {name: "buf", value: 3, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}
-mem/0: location 1103 is 1000
-run/0: ingredient 1 is {name: "idx", value: 2, type: 2-1, properties: ["idx": "address":"integer", "deref": ]}
-mem/0: location 1102 is 1035
-mem/0: location 1035 is 2
-run/0: address to copy is 1003
-run/0: its type is 4
-mem/0: location 1003 is 99
-run/0: product 0 is 99
-mem/0: storing 99 in location 1106
-run/0: instruction read-key/13
-run/0: {name: "idx", value: 2, type: 2-1, properties: ["idx": "address":"integer", "deref": ]} <- add/2 {name: "idx", value: 2, type: 2-1, properties: ["idx": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is idx
-mem/0: location 1102 is 1035
-mem/0: location 1035 is 2
-run/0: ingredient 1 is 1
-run/0: product 0 is 3
-mem/0: location 1102 is 1035
-mem/0: storing 3 in location 1035
-run/0: instruction read-key/14
-run/0: reply/33 {name: "c", value: 6, type: 4, properties: ["c": "character"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal", "found": ]}, {name: "x", value: 1, type: 2-12, properties: ["x": "address":"keyboard", "same-as-ingredient": "0"]}
-mem/0: location 1106 is 99
-mem/0: location 1101 is 1035
-run/0: result 0 is 99
-mem/0: storing 99 in location 5
-run/0: result 1 is 1
-mem/0: storing 1 in location 6
-run/0: result 2 is 1035
-mem/0: storing 1035 in location 901
-run/0: instruction run1002/3
-run/0: {name: "7", value: 7, type: 4, properties: ["7": "character"]}, {name: "8", value: 8, type: 3, properties: ["8": "boolean"]}, {name: "keyboard", value: 901, type: 2, properties: ["keyboard": "address"]} <- read-key/126 {name: "keyboard", value: 901, type: 2, properties: ["keyboard": "address"]}
-mem/0: location 901 is 1035
-run/0: instruction read-key/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1130
-run/0: instruction read-key/1
-run/0: {name: "x", value: 1, type: 2-12, properties: ["x": "address":"keyboard"]} <- next-ingredient/30 
-run/0: product 0 is 1035
-mem/0: storing 1035 in location 1132
-run/0: instruction read-key/3
-run/0: break-unless/12 {name: "x", value: 1, type: 2-12, properties: ["x": "address":"keyboard"]}, {name: "", value: 11, type: , properties: ["": ]}
-mem/0: location 1132 is 1035
-run/0: ingredient 0 is 1035
-run/0: jump-unless fell through
-run/0: instruction read-key/4
-run/0: {name: "idx", value: 2, type: 2-1, properties: ["idx": "address":"integer"]} <- get-address/25 {name: "x", value: 1, type: 2-12, properties: ["x": "address":"keyboard", "deref": ]}, {name: "index", value: 0, type: 0, properties: ["index": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1132 is 1035
-run/0: ingredient 1 is index
-run/0: address to copy is 1035
-run/0: product 0 is 1035
-mem/0: storing 1035 in location 1133
-run/0: instruction read-key/5
-run/0: {name: "buf", value: 3, type: 2-5-4, properties: ["buf": "address":"array":"character"]} <- get/24 {name: "x", value: 1, type: 2-12, properties: ["x": "address":"keyboard", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1132 is 1035
-run/0: ingredient 1 is data
-run/0: address to copy is 1036
-run/0: its type is 2
-mem/0: location 1036 is 1000
-run/0: product 0 is 1000
-mem/0: storing 1000 in location 1134
-run/0: instruction read-key/6
-run/0: {name: "max", value: 4, type: 1, properties: ["max": "integer"]} <- length/28 {name: "buf", value: 3, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}
-mem/0: location 1134 is 1000
-mem/0: storing 3 in location 1135
-run/0: instruction read-key/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "idx", value: 2, type: 2-1, properties: ["idx": "address":"integer", "deref": ]}, {name: "max", value: 4, type: 1, properties: ["max": "integer"]}
-run/0: ingredient 0 is idx
-mem/0: location 1133 is 1035
-mem/0: location 1035 is 3
-run/0: ingredient 1 is max
-mem/0: location 1135 is 3
-run/0: product 0 is 1
-mem/0: storing 1 in location 1136
-run/0: instruction read-key/9
-run/0: break-unless/12 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
-mem/0: location 1136 is 1
-run/0: ingredient 0 is 1
-run/0: jump-unless fell through
-run/0: instruction read-key/10
-run/0: reply/33 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}, {name: "0", value: 0, type: 0, properties: ["0": "literal", "done": ]}, {name: "x", value: 1, type: 2-12, properties: ["x": "address":"keyboard", "same-as-ingredient": "0"]}
-mem/0: location 1132 is 1035
-run/0: result 0 is 0
-mem/0: storing 0 in location 7
-run/0: result 1 is 0
-mem/0: storing 0 in location 8
-run/0: result 2 is 1035
-mem/0: storing 1035 in location 901
-run/0: instruction keyboard-in-scenario/3
-run/0: memory-should-contain/46 {name: "
-    1 <- 97  # 'a'
-    2 <- 1  # first read-key call found a character
-    3 <- 98  # 'b'
-    4 <- 1  # second read-key call found a character
-    5 <- 99  # 'c'
-    6 <- 1  # third read-key call found a character
-    7 <- 0
-    8 <- 0  # fourth read-key call didn't find a character
-  ", value: 0, type: 0, properties: ["
-    1 <- 97  # 'a'
-    2 <- 1  # first read-key call found a character
-    3 <- 98  # 'b'
-    4 <- 1  # second read-key call found a character
-    5 <- 99  # 'c'
-    6 <- 1  # third read-key call found a character
-    7 <- 0
-    8 <- 0  # fourth read-key call didn't find a character
-  ": "literal-string"]}
-run/0: checking location 1
-run/0: checking location 2
-run/0: checking location 3
-run/0: checking location 4
-run/0: checking location 5
-run/0: checking location 6
-run/0: checking location 7
-run/0: checking location 8
diff --git a/cpp/.traces/lesser_or_equal b/cpp/.traces/lesser_or_equal
deleted file mode 100644
index ef139323..00000000
--- a/cpp/.traces/lesser_or_equal
+++ /dev/null
@@ -1,32 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "32", value: 0, type: 0, properties: ["32": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "33", value: 0, type: 0, properties: ["33": "literal"]}
-parse/0:   product: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-parse/0: instruction: lesser-or-equal
-parse/0:   ingredient: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0:   ingredient: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-parse/0:   product: {name: "3", value: 0, type: 1, properties: ["3": "integer"]}
-after-brace/0: recipe main
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: lesser-or-equal ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "32", value: 32, type: 0, properties: ["32": "literal"]}
-run/0: ingredient 0 is 32
-mem/0: storing 32 in location 1
-run/0: instruction main/1
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "33", value: 33, type: 0, properties: ["33": "literal"]}
-run/0: ingredient 0 is 33
-mem/0: storing 33 in location 2
-run/0: instruction main/2
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- lesser-or-equal/17 {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "2", value: 2, type: 1, properties: ["2": "integer"]}
-run/0: ingredient 0 is 1
-mem/0: location 1 is 32
-run/0: ingredient 1 is 2
-mem/0: location 2 is 33
-run/0: product 0 is 1
-mem/0: storing 1 in location 3
diff --git a/cpp/.traces/lesser_or_equal2 b/cpp/.traces/lesser_or_equal2
deleted file mode 100644
index 3f75857d..00000000
--- a/cpp/.traces/lesser_or_equal2
+++ /dev/null
@@ -1,32 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "33", value: 0, type: 0, properties: ["33": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "33", value: 0, type: 0, properties: ["33": "literal"]}
-parse/0:   product: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-parse/0: instruction: lesser-or-equal
-parse/0:   ingredient: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0:   ingredient: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-parse/0:   product: {name: "3", value: 0, type: 1, properties: ["3": "integer"]}
-after-brace/0: recipe main
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: lesser-or-equal ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "33", value: 33, type: 0, properties: ["33": "literal"]}
-run/0: ingredient 0 is 33
-mem/0: storing 33 in location 1
-run/0: instruction main/1
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "33", value: 33, type: 0, properties: ["33": "literal"]}
-run/0: ingredient 0 is 33
-mem/0: storing 33 in location 2
-run/0: instruction main/2
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- lesser-or-equal/17 {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "2", value: 2, type: 1, properties: ["2": "integer"]}
-run/0: ingredient 0 is 1
-mem/0: location 1 is 33
-run/0: ingredient 1 is 2
-mem/0: location 2 is 33
-run/0: product 0 is 1
-mem/0: storing 1 in location 3
diff --git a/cpp/.traces/lesser_or_equal3 b/cpp/.traces/lesser_or_equal3
deleted file mode 100644
index cc7d8d18..00000000
--- a/cpp/.traces/lesser_or_equal3
+++ /dev/null
@@ -1,32 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "34", value: 0, type: 0, properties: ["34": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "33", value: 0, type: 0, properties: ["33": "literal"]}
-parse/0:   product: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-parse/0: instruction: lesser-or-equal
-parse/0:   ingredient: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0:   ingredient: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-parse/0:   product: {name: "3", value: 0, type: 1, properties: ["3": "integer"]}
-after-brace/0: recipe main
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: lesser-or-equal ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
-run/0: ingredient 0 is 34
-mem/0: storing 34 in location 1
-run/0: instruction main/1
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "33", value: 33, type: 0, properties: ["33": "literal"]}
-run/0: ingredient 0 is 33
-mem/0: storing 33 in location 2
-run/0: instruction main/2
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- lesser-or-equal/17 {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "2", value: 2, type: 1, properties: ["2": "integer"]}
-run/0: ingredient 0 is 1
-mem/0: location 1 is 34
-run/0: ingredient 1 is 2
-mem/0: location 2 is 33
-run/0: product 0 is 0
-mem/0: storing 0 in location 3
diff --git a/cpp/.traces/lesser_than b/cpp/.traces/lesser_than
deleted file mode 100644
index 8c5a05dc..00000000
--- a/cpp/.traces/lesser_than
+++ /dev/null
@@ -1,32 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "32", value: 0, type: 0, properties: ["32": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "33", value: 0, type: 0, properties: ["33": "literal"]}
-parse/0:   product: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-parse/0: instruction: lesser-than
-parse/0:   ingredient: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0:   ingredient: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-parse/0:   product: {name: "3", value: 0, type: 1, properties: ["3": "integer"]}
-after-brace/0: recipe main
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: lesser-than ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "32", value: 32, type: 0, properties: ["32": "literal"]}
-run/0: ingredient 0 is 32
-mem/0: storing 32 in location 1
-run/0: instruction main/1
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "33", value: 33, type: 0, properties: ["33": "literal"]}
-run/0: ingredient 0 is 33
-mem/0: storing 33 in location 2
-run/0: instruction main/2
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- lesser-than/15 {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "2", value: 2, type: 1, properties: ["2": "integer"]}
-run/0: ingredient 0 is 1
-mem/0: location 1 is 32
-run/0: ingredient 1 is 2
-mem/0: location 2 is 33
-run/0: product 0 is 1
-mem/0: storing 1 in location 3
diff --git a/cpp/.traces/lesser_than2 b/cpp/.traces/lesser_than2
deleted file mode 100644
index 27c17708..00000000
--- a/cpp/.traces/lesser_than2
+++ /dev/null
@@ -1,32 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "34", value: 0, type: 0, properties: ["34": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "33", value: 0, type: 0, properties: ["33": "literal"]}
-parse/0:   product: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-parse/0: instruction: lesser-than
-parse/0:   ingredient: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0:   ingredient: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-parse/0:   product: {name: "3", value: 0, type: 1, properties: ["3": "integer"]}
-after-brace/0: recipe main
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: lesser-than ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
-run/0: ingredient 0 is 34
-mem/0: storing 34 in location 1
-run/0: instruction main/1
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "33", value: 33, type: 0, properties: ["33": "literal"]}
-run/0: ingredient 0 is 33
-mem/0: storing 33 in location 2
-run/0: instruction main/2
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- lesser-than/15 {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "2", value: 2, type: 1, properties: ["2": "integer"]}
-run/0: ingredient 0 is 1
-mem/0: location 1 is 34
-run/0: ingredient 1 is 2
-mem/0: location 2 is 33
-run/0: product 0 is 0
-mem/0: storing 0 in location 3
diff --git a/cpp/.traces/loop b/cpp/.traces/loop
deleted file mode 100644
index b3a25323..00000000
--- a/cpp/.traces/loop
+++ /dev/null
@@ -1,21 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-parse/0:   product: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-parse/0: label: {
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-parse/0:   product: {name: "3", value: 0, type: 1, properties: ["3": "integer"]}
-parse/0: instruction: loop
-parse/0: label: }
-brace/0: 1000: push (open, 2)
-brace/0: push (close, 5)
-after-brace/0: recipe main
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: jump -2:offset
-after-brace/0: 4: {name: "", value: -2, type: , properties: ["": ]}
-after-brace/0: 4: {name: "", value: -2, type: , properties: ["": ]}
diff --git a/cpp/.traces/loop_label b/cpp/.traces/loop_label
deleted file mode 100644
index 3d3f36f3..00000000
--- a/cpp/.traces/loop_label
+++ /dev/null
@@ -1,10 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0: label: +foo
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-parse/0:   product: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-after-brace/0: recipe main
-after-brace/0: copy ...
-after-brace/0: copy ...
diff --git a/cpp/.traces/loop_nested b/cpp/.traces/loop_nested
deleted file mode 100644
index ef21f26b..00000000
--- a/cpp/.traces/loop_nested
+++ /dev/null
@@ -1,28 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0: label: {
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-parse/0:   product: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-parse/0: label: {
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-parse/0:   product: {name: "3", value: 0, type: 1, properties: ["3": "integer"]}
-parse/0: label: }
-parse/0: instruction: loop-if
-parse/0:   ingredient: {name: "4", value: 0, type: 3, properties: ["4": "boolean"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-parse/0:   product: {name: "5", value: 0, type: 1, properties: ["5": "integer"]}
-parse/0: label: }
-brace/0: 1000: push (open, 1)
-brace/0: 1000: push (open, 3)
-brace/0: push (close, 5)
-brace/0: push (close, 8)
-after-brace/0: recipe main
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: jump-if 4, -5:offset
-after-brace/0: copy ...
diff --git a/cpp/.traces/loop_unless b/cpp/.traces/loop_unless
deleted file mode 100644
index d29f272f..00000000
--- a/cpp/.traces/loop_unless
+++ /dev/null
@@ -1,20 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-parse/0:   product: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-parse/0: label: {
-parse/0: instruction: loop-unless
-parse/0:   ingredient: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-parse/0:   product: {name: "3", value: 0, type: 1, properties: ["3": "integer"]}
-parse/0: label: }
-brace/0: 1000: push (open, 2)
-brace/0: push (close, 5)
-after-brace/0: recipe main
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: jump-unless 2, -1:offset
-after-brace/0: copy ...
diff --git a/cpp/.traces/maybe_convert b/cpp/.traces/maybe_convert
deleted file mode 100644
index 5a90d04c..00000000
--- a/cpp/.traces/maybe_convert
+++ /dev/null
@@ -1,37 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "1", value: 0, type: 0, properties: ["1": "literal"]}
-parse/0:   product: {name: "12", value: 0, type: 1, properties: ["12": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "35", value: 0, type: 0, properties: ["35": "literal"]}
-parse/0:   product: {name: "13", value: 0, type: 1, properties: ["13": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "36", value: 0, type: 0, properties: ["36": "literal"]}
-parse/0:   product: {name: "14", value: 0, type: 1, properties: ["14": "integer"]}
-parse/0: instruction: maybe-convert
-parse/0:   ingredient: {name: "12", value: 0, type: 8, properties: ["12": "integer-or-point"]}
-parse/0:   ingredient: {name: "1", value: 0, type: 0, properties: ["1": "variant"]}
-parse/0:   product: {name: "20", value: 0, type: 2-6, properties: ["20": "address":"point"]}
-after-brace/0: recipe main
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: maybe-convert ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: {name: "12", value: 12, type: 1, properties: ["12": "integer"]} <- copy/1 {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is 1
-mem/0: storing 1 in location 12
-run/0: instruction main/1
-run/0: {name: "13", value: 13, type: 1, properties: ["13": "integer"]} <- copy/1 {name: "35", value: 35, type: 0, properties: ["35": "literal"]}
-run/0: ingredient 0 is 35
-mem/0: storing 35 in location 13
-run/0: instruction main/2
-run/0: {name: "14", value: 14, type: 1, properties: ["14": "integer"]} <- copy/1 {name: "36", value: 36, type: 0, properties: ["36": "literal"]}
-run/0: ingredient 0 is 36
-mem/0: storing 36 in location 14
-run/0: instruction main/3
-run/0: {name: "20", value: 20, type: 2-6, properties: ["20": "address":"point"]} <- maybe-convert/29 {name: "12", value: 12, type: 8, properties: ["12": "integer-or-point"]}, {name: "1", value: 1, type: 0, properties: ["1": "variant"]}
-run/0: ingredient 0 is 12
-run/0: ingredient 1 is 1
-mem/0: storing 13 in location 20
diff --git a/cpp/.traces/maybe_convert_fail b/cpp/.traces/maybe_convert_fail
deleted file mode 100644
index e925f76c..00000000
--- a/cpp/.traces/maybe_convert_fail
+++ /dev/null
@@ -1,37 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "1", value: 0, type: 0, properties: ["1": "literal"]}
-parse/0:   product: {name: "12", value: 0, type: 1, properties: ["12": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "35", value: 0, type: 0, properties: ["35": "literal"]}
-parse/0:   product: {name: "13", value: 0, type: 1, properties: ["13": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "36", value: 0, type: 0, properties: ["36": "literal"]}
-parse/0:   product: {name: "14", value: 0, type: 1, properties: ["14": "integer"]}
-parse/0: instruction: maybe-convert
-parse/0:   ingredient: {name: "12", value: 0, type: 8, properties: ["12": "integer-or-point"]}
-parse/0:   ingredient: {name: "0", value: 0, type: 0, properties: ["0": "variant"]}
-parse/0:   product: {name: "20", value: 0, type: 2-6, properties: ["20": "address":"point"]}
-after-brace/0: recipe main
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: maybe-convert ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: {name: "12", value: 12, type: 1, properties: ["12": "integer"]} <- copy/1 {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is 1
-mem/0: storing 1 in location 12
-run/0: instruction main/1
-run/0: {name: "13", value: 13, type: 1, properties: ["13": "integer"]} <- copy/1 {name: "35", value: 35, type: 0, properties: ["35": "literal"]}
-run/0: ingredient 0 is 35
-mem/0: storing 35 in location 13
-run/0: instruction main/2
-run/0: {name: "14", value: 14, type: 1, properties: ["14": "integer"]} <- copy/1 {name: "36", value: 36, type: 0, properties: ["36": "literal"]}
-run/0: ingredient 0 is 36
-mem/0: storing 36 in location 14
-run/0: instruction main/3
-run/0: {name: "20", value: 20, type: 2-6, properties: ["20": "address":"point"]} <- maybe-convert/29 {name: "12", value: 12, type: 8, properties: ["12": "integer-or-point"]}, {name: "0", value: 0, type: 0, properties: ["0": "variant"]}
-run/0: ingredient 0 is 12
-run/0: ingredient 1 is 0
-mem/0: storing 0 in location 20
diff --git a/cpp/.traces/maybe_convert_named b/cpp/.traces/maybe_convert_named
deleted file mode 100644
index aea23061..00000000
--- a/cpp/.traces/maybe_convert_named
+++ /dev/null
@@ -1,38 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "1", value: 0, type: 0, properties: ["1": "literal"]}
-parse/0:   product: {name: "12", value: 0, type: 1, properties: ["12": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "35", value: 0, type: 0, properties: ["35": "literal"]}
-parse/0:   product: {name: "13", value: 0, type: 1, properties: ["13": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "36", value: 0, type: 0, properties: ["36": "literal"]}
-parse/0:   product: {name: "14", value: 0, type: 1, properties: ["14": "integer"]}
-parse/0: instruction: maybe-convert
-parse/0:   ingredient: {name: "12", value: 0, type: 8, properties: ["12": "integer-or-point"]}
-parse/0:   ingredient: {name: "p", value: 0, type: 0, properties: ["p": "variant"]}
-parse/0:   product: {name: "20", value: 0, type: 2-6, properties: ["20": "address":"point"]}
-name/0: variant p of type integer-or-point has tag 1
-after-brace/0: recipe main
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: maybe-convert ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: {name: "12", value: 12, type: 1, properties: ["12": "integer"]} <- copy/1 {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is 1
-mem/0: storing 1 in location 12
-run/0: instruction main/1
-run/0: {name: "13", value: 13, type: 1, properties: ["13": "integer"]} <- copy/1 {name: "35", value: 35, type: 0, properties: ["35": "literal"]}
-run/0: ingredient 0 is 35
-mem/0: storing 35 in location 13
-run/0: instruction main/2
-run/0: {name: "14", value: 14, type: 1, properties: ["14": "integer"]} <- copy/1 {name: "36", value: 36, type: 0, properties: ["36": "literal"]}
-run/0: ingredient 0 is 36
-mem/0: storing 36 in location 14
-run/0: instruction main/3
-run/0: {name: "20", value: 20, type: 2-6, properties: ["20": "address":"point"]} <- maybe-convert/29 {name: "12", value: 12, type: 8, properties: ["12": "integer-or-point"]}, {name: "p", value: 1, type: 0, properties: ["p": "variant"]}
-run/0: ingredient 0 is 12
-run/0: ingredient 1 is p
-mem/0: storing 13 in location 20
diff --git a/cpp/.traces/memory_check b/cpp/.traces/memory_check
deleted file mode 100644
index c87bcc2f..00000000
--- a/cpp/.traces/memory_check
+++ /dev/null
@@ -1,18 +0,0 @@
-parse/0: instruction: memory-should-contain
-parse/0:   ingredient: {name: "
-    1 <- 13
-  ", value: 0, type: 0, properties: ["
-    1 <- 13
-  ": "literal-string"]}
-after-brace/0: recipe main
-after-brace/0: memory-should-contain ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: memory-should-contain/46 {name: "
-    1 <- 13
-  ", value: 0, type: 0, properties: ["
-    1 <- 13
-  ": "literal-string"]}
-run/0: checking location 1
-warn/0: expected location 1 to contain 13 but saw 0
diff --git a/cpp/.traces/memory_check_multiple b/cpp/.traces/memory_check_multiple
deleted file mode 100644
index 50aa0237..00000000
--- a/cpp/.traces/memory_check_multiple
+++ /dev/null
@@ -1,23 +0,0 @@
-parse/0: instruction: memory-should-contain
-parse/0:   ingredient: {name: "
-    1 <- 0
-    1 <- 0
-  ", value: 0, type: 0, properties: ["
-    1 <- 0
-    1 <- 0
-  ": "literal-string"]}
-after-brace/0: recipe main
-after-brace/0: memory-should-contain ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: memory-should-contain/46 {name: "
-    1 <- 0
-    1 <- 0
-  ", value: 0, type: 0, properties: ["
-    1 <- 0
-    1 <- 0
-  ": "literal-string"]}
-run/0: checking location 1
-warn/0: duplicate expectation for location 1
-run/0: checking location 1
diff --git a/cpp/.traces/memory_check_string b/cpp/.traces/memory_check_string
deleted file mode 100644
index 2f47f64f..00000000
--- a/cpp/.traces/memory_check_string
+++ /dev/null
@@ -1,52 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "3", value: 0, type: 0, properties: ["3": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "97", value: 0, type: 0, properties: ["97": "literal"]}
-parse/0:   product: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "98", value: 0, type: 0, properties: ["98": "literal"]}
-parse/0:   product: {name: "3", value: 0, type: 1, properties: ["3": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "99", value: 0, type: 0, properties: ["99": "literal"]}
-parse/0:   product: {name: "4", value: 0, type: 1, properties: ["4": "integer"]}
-parse/0: instruction: memory-should-contain
-parse/0:   ingredient: {name: "
-    1:string <- [abc]
-  ", value: 0, type: 0, properties: ["
-    1:string <- [abc]
-  ": "literal-string"]}
-after-brace/0: recipe main
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: memory-should-contain ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "3", value: 3, type: 0, properties: ["3": "literal"]}
-run/0: ingredient 0 is 3
-mem/0: storing 3 in location 1
-run/0: instruction main/1
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "97", value: 97, type: 0, properties: ["97": "literal"]}
-run/0: ingredient 0 is 97
-mem/0: storing 97 in location 2
-run/0: instruction main/2
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- copy/1 {name: "98", value: 98, type: 0, properties: ["98": "literal"]}
-run/0: ingredient 0 is 98
-mem/0: storing 98 in location 3
-run/0: instruction main/3
-run/0: {name: "4", value: 4, type: 1, properties: ["4": "integer"]} <- copy/1 {name: "99", value: 99, type: 0, properties: ["99": "literal"]}
-run/0: ingredient 0 is 99
-mem/0: storing 99 in location 4
-run/0: instruction main/4
-run/0: memory-should-contain/46 {name: "
-    1:string <- [abc]
-  ", value: 0, type: 0, properties: ["
-    1:string <- [abc]
-  ": "literal-string"]}
-run/0: checking string length at 1
-run/0: checking location 2
-run/0: checking location 3
-run/0: checking location 4
diff --git a/cpp/.traces/memory_check_string_length b/cpp/.traces/memory_check_string_length
deleted file mode 100644
index 84fb62e1..00000000
--- a/cpp/.traces/memory_check_string_length
+++ /dev/null
@@ -1,52 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "3", value: 0, type: 0, properties: ["3": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "97", value: 0, type: 0, properties: ["97": "literal"]}
-parse/0:   product: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "98", value: 0, type: 0, properties: ["98": "literal"]}
-parse/0:   product: {name: "3", value: 0, type: 1, properties: ["3": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "99", value: 0, type: 0, properties: ["99": "literal"]}
-parse/0:   product: {name: "4", value: 0, type: 1, properties: ["4": "integer"]}
-parse/0: instruction: memory-should-contain
-parse/0:   ingredient: {name: "
-    1:string <- [ab]
-  ", value: 0, type: 0, properties: ["
-    1:string <- [ab]
-  ": "literal-string"]}
-after-brace/0: recipe main
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: memory-should-contain ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "3", value: 3, type: 0, properties: ["3": "literal"]}
-run/0: ingredient 0 is 3
-mem/0: storing 3 in location 1
-run/0: instruction main/1
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "97", value: 97, type: 0, properties: ["97": "literal"]}
-run/0: ingredient 0 is 97
-mem/0: storing 97 in location 2
-run/0: instruction main/2
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- copy/1 {name: "98", value: 98, type: 0, properties: ["98": "literal"]}
-run/0: ingredient 0 is 98
-mem/0: storing 98 in location 3
-run/0: instruction main/3
-run/0: {name: "4", value: 4, type: 1, properties: ["4": "integer"]} <- copy/1 {name: "99", value: 99, type: 0, properties: ["99": "literal"]}
-run/0: ingredient 0 is 99
-mem/0: storing 99 in location 4
-run/0: instruction main/4
-run/0: memory-should-contain/46 {name: "
-    1:string <- [ab]
-  ", value: 0, type: 0, properties: ["
-    1:string <- [ab]
-  ": "literal-string"]}
-run/0: checking string length at 1
-warn/0: expected location 1 to contain length 2 of string [ab] but saw 3
-run/0: checking location 2
-run/0: checking location 3
diff --git a/cpp/.traces/multiply b/cpp/.traces/multiply
deleted file mode 100644
index ceb7be06..00000000
--- a/cpp/.traces/multiply
+++ /dev/null
@@ -1,33 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "4", value: 0, type: 0, properties: ["4": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "6", value: 0, type: 0, properties: ["6": "literal"]}
-parse/0:   product: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-parse/0: instruction: multiply
-parse/0:   ingredient: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0:   ingredient: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-parse/0:   product: {name: "3", value: 0, type: 1, properties: ["3": "integer"]}
-after-brace/0: recipe main
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: multiply ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "4", value: 4, type: 0, properties: ["4": "literal"]}
-run/0: ingredient 0 is 4
-mem/0: storing 4 in location 1
-run/0: instruction main/1
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "6", value: 6, type: 0, properties: ["6": "literal"]}
-run/0: ingredient 0 is 6
-mem/0: storing 6 in location 2
-run/0: instruction main/2
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- multiply/4 {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "2", value: 2, type: 1, properties: ["2": "integer"]}
-run/0: ingredient 0 is 1
-mem/0: location 1 is 4
-run/0: ingredient 1 is 2
-mem/0: location 2 is 6
-run/0: ingredient 1 is 6
-run/0: product 0 is 24
-mem/0: storing 24 in location 3
diff --git a/cpp/.traces/multiply_literal b/cpp/.traces/multiply_literal
deleted file mode 100644
index 115fb958..00000000
--- a/cpp/.traces/multiply_literal
+++ /dev/null
@@ -1,15 +0,0 @@
-parse/0: instruction: multiply
-parse/0:   ingredient: {name: "2", value: 0, type: 0, properties: ["2": "literal"]}
-parse/0:   ingredient: {name: "3", value: 0, type: 0, properties: ["3": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-after-brace/0: recipe main
-after-brace/0: multiply ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- multiply/4 {name: "2", value: 2, type: 0, properties: ["2": "literal"]}, {name: "3", value: 3, type: 0, properties: ["3": "literal"]}
-run/0: ingredient 0 is 2
-run/0: ingredient 1 is 3
-run/0: ingredient 1 is 3
-run/0: product 0 is 6
-mem/0: storing 6 in location 1
diff --git a/cpp/.traces/new b/cpp/.traces/new
deleted file mode 100644
index 82e25ee1..00000000
--- a/cpp/.traces/new
+++ /dev/null
@@ -1,34 +0,0 @@
-parse/0: instruction: new
-parse/0:   ingredient: {name: "integer", value: 0, type: 0, properties: ["integer": "type"]}
-parse/0:   product: {name: "1", value: 0, type: 2-1, properties: ["1": "address":"integer", "raw": ]}
-parse/0: instruction: new
-parse/0:   ingredient: {name: "integer", value: 0, type: 0, properties: ["integer": "type"]}
-parse/0:   product: {name: "2", value: 0, type: 2-1, properties: ["2": "address":"integer", "raw": ]}
-parse/0: instruction: equal
-parse/0:   ingredient: {name: "1", value: 0, type: 2-1, properties: ["1": "address":"integer", "raw": ]}
-parse/0:   ingredient: {name: "2", value: 0, type: 2-1, properties: ["2": "address":"integer", "raw": ]}
-parse/0:   product: {name: "3", value: 0, type: 3, properties: ["3": "boolean", "raw": ]}
-new/0: integer -> 1
-new/0: integer -> 1
-after-brace/0: recipe main
-after-brace/0: new ...
-after-brace/0: new ...
-after-brace/0: equal ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 2-1, properties: ["1": "address":"integer", "raw": ]} <- new/44 {name: "integer", value: 1, type: 0, properties: ["integer": "type"]}
-mem/0: new alloc: 1000
-mem/0: storing 1000 in location 1
-run/0: instruction main/1
-run/0: {name: "2", value: 2, type: 2-1, properties: ["2": "address":"integer", "raw": ]} <- new/44 {name: "integer", value: 1, type: 0, properties: ["integer": "type"]}
-mem/0: new alloc: 1001
-mem/0: storing 1001 in location 2
-run/0: instruction main/2
-run/0: {name: "3", value: 3, type: 3, properties: ["3": "boolean", "raw": ]} <- equal/13 {name: "1", value: 1, type: 2-1, properties: ["1": "address":"integer", "raw": ]}, {name: "2", value: 2, type: 2-1, properties: ["2": "address":"integer", "raw": ]}
-run/0: ingredient 0 is 1
-mem/0: location 1 is 1000
-run/0: ingredient 1 is 2
-mem/0: location 2 is 1001
-run/0: product 0 is 0
-mem/0: storing 0 in location 3
diff --git a/cpp/.traces/new_array b/cpp/.traces/new_array
deleted file mode 100644
index 830d8c00..00000000
--- a/cpp/.traces/new_array
+++ /dev/null
@@ -1,36 +0,0 @@
-parse/0: instruction: new
-parse/0:   ingredient: {name: "integer", value: 0, type: 0, properties: ["integer": "type"]}
-parse/0:   ingredient: {name: "5", value: 0, type: 0, properties: ["5": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 2-5-1, properties: ["1": "address":"array":"integer", "raw": ]}
-parse/0: instruction: new
-parse/0:   ingredient: {name: "integer", value: 0, type: 0, properties: ["integer": "type"]}
-parse/0:   product: {name: "2", value: 0, type: 2-1, properties: ["2": "address":"integer", "raw": ]}
-parse/0: instruction: subtract
-parse/0:   ingredient: {name: "2", value: 0, type: 2-1, properties: ["2": "address":"integer", "raw": ]}
-parse/0:   ingredient: {name: "1", value: 0, type: 2-5-1, properties: ["1": "address":"array":"integer", "raw": ]}
-parse/0:   product: {name: "3", value: 0, type: 1, properties: ["3": "integer", "raw": ]}
-new/0: integer -> 1
-new/0: integer -> 1
-after-brace/0: recipe main
-after-brace/0: new ...
-after-brace/0: new ...
-after-brace/0: subtract ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 2-5-1, properties: ["1": "address":"array":"integer", "raw": ]} <- new/44 {name: "integer", value: 1, type: 0, properties: ["integer": "type"]}, {name: "5", value: 5, type: 0, properties: ["5": "literal"]}
-mem/0: array size is 5
-mem/0: new alloc: 1000
-mem/0: storing 1000 in location 1
-run/0: instruction main/1
-run/0: {name: "2", value: 2, type: 2-1, properties: ["2": "address":"integer", "raw": ]} <- new/44 {name: "integer", value: 1, type: 0, properties: ["integer": "type"]}
-mem/0: new alloc: 1006
-mem/0: storing 1006 in location 2
-run/0: instruction main/2
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer", "raw": ]} <- subtract/3 {name: "2", value: 2, type: 2-1, properties: ["2": "address":"integer", "raw": ]}, {name: "1", value: 1, type: 2-5-1, properties: ["1": "address":"array":"integer", "raw": ]}
-run/0: ingredient 0 is 2
-mem/0: location 2 is 1006
-run/0: ingredient 1 is 1
-mem/0: location 1 is 1000
-run/0: product 0 is 6
-mem/0: storing 6 in location 3
diff --git a/cpp/.traces/new_concurrent b/cpp/.traces/new_concurrent
deleted file mode 100644
index f3d2f2c7..00000000
--- a/cpp/.traces/new_concurrent
+++ /dev/null
@@ -1,43 +0,0 @@
-parse/0: instruction: start-running
-parse/0:   ingredient: {name: "f2", value: 0, type: 0, properties: ["f2": "recipe"]}
-parse/0: instruction: new
-parse/0:   ingredient: {name: "integer", value: 0, type: 0, properties: ["integer": "type"]}
-parse/0:   product: {name: "1", value: 0, type: 2-1, properties: ["1": "address":"integer", "raw": ]}
-parse/0: instruction: new
-parse/0:   ingredient: {name: "integer", value: 0, type: 0, properties: ["integer": "type"]}
-parse/0:   product: {name: "2", value: 0, type: 2-1, properties: ["2": "address":"integer", "raw": ]}
-parse/0: instruction: equal
-parse/0:   ingredient: {name: "1", value: 0, type: 2-1, properties: ["1": "address":"integer", "raw": ]}
-parse/0:   ingredient: {name: "2", value: 0, type: 2-1, properties: ["2": "address":"integer", "raw": ]}
-parse/0:   product: {name: "3", value: 0, type: 3, properties: ["3": "boolean", "raw": ]}
-new/0: integer -> 1
-new/0: integer -> 1
-after-brace/0: recipe f1
-after-brace/0: start-running ...
-after-brace/0: new ...
-after-brace/0: recipe f2
-after-brace/0: new ...
-after-brace/0: equal ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: f1
-run/0: instruction f1/0
-run/0: start-running/34 {name: "f2", value: 0, type: 0, properties: ["f2": "recipe"]}
-run/0: ingredient 0 is f2
-new/0: routine allocated memory from 101000 to 201000
-run/0: instruction f1/1
-run/0: {name: "1", value: 1, type: 2-1, properties: ["1": "address":"integer", "raw": ]} <- new/44 {name: "integer", value: 1, type: 0, properties: ["integer": "type"]}
-mem/0: new alloc: 1000
-mem/0: storing 1000 in location 1
-schedule/0: f2
-run/0: instruction f2/0
-run/0: {name: "2", value: 2, type: 2-1, properties: ["2": "address":"integer", "raw": ]} <- new/44 {name: "integer", value: 1, type: 0, properties: ["integer": "type"]}
-mem/0: new alloc: 101000
-mem/0: storing 101000 in location 2
-run/0: instruction f2/1
-run/0: {name: "3", value: 3, type: 3, properties: ["3": "boolean", "raw": ]} <- equal/13 {name: "1", value: 1, type: 2-1, properties: ["1": "address":"integer", "raw": ]}, {name: "2", value: 2, type: 2-1, properties: ["2": "address":"integer", "raw": ]}
-run/0: ingredient 0 is 1
-mem/0: location 1 is 1000
-run/0: ingredient 1 is 2
-mem/0: location 2 is 101000
-run/0: product 0 is 0
-mem/0: storing 0 in location 3
diff --git a/cpp/.traces/new_overflow b/cpp/.traces/new_overflow
deleted file mode 100644
index a0a54308..00000000
--- a/cpp/.traces/new_overflow
+++ /dev/null
@@ -1,22 +0,0 @@
-parse/0: instruction: new
-parse/0:   ingredient: {name: "integer", value: 0, type: 0, properties: ["integer": "type"]}
-parse/0:   product: {name: "1", value: 0, type: 2-1, properties: ["1": "address":"integer", "raw": ]}
-parse/0: instruction: new
-parse/0:   ingredient: {name: "point", value: 0, type: 0, properties: ["point": "type"]}
-parse/0:   product: {name: "2", value: 0, type: 2-6, properties: ["2": "address":"point", "raw": ]}
-new/0: integer -> 1
-new/0: point -> 6
-after-brace/0: recipe main
-after-brace/0: new ...
-after-brace/0: new ...
-new/0: routine allocated memory from 1000 to 1002
-schedule/0: main
-run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 2-1, properties: ["1": "address":"integer", "raw": ]} <- new/44 {name: "integer", value: 1, type: 0, properties: ["integer": "type"]}
-mem/0: new alloc: 1000
-mem/0: storing 1000 in location 1
-run/0: instruction main/1
-run/0: {name: "2", value: 2, type: 2-6, properties: ["2": "address":"point", "raw": ]} <- new/44 {name: "point", value: 6, type: 0, properties: ["point": "type"]}
-new/0: routine allocated memory from 1002 to 1004
-mem/0: new alloc: 1002
-mem/0: storing 1002 in location 2
diff --git a/cpp/.traces/new_string b/cpp/.traces/new_string
deleted file mode 100644
index ed0e8481..00000000
--- a/cpp/.traces/new_string
+++ /dev/null
@@ -1,26 +0,0 @@
-parse/0: instruction: new
-parse/0:   ingredient: {name: "abc def", value: 0, type: 0, properties: ["abc def": "literal-string"]}
-parse/0:   product: {name: "1", value: 0, type: 2-5-4, properties: ["1": "address":"array":"character"]}
-parse/0: instruction: index
-parse/0:   ingredient: {name: "1", value: 0, type: 2-5-4, properties: ["1": "address":"array":"character", "deref": ]}
-parse/0:   ingredient: {name: "5", value: 0, type: 0, properties: ["5": "literal"]}
-parse/0:   product: {name: "2", value: 0, type: 4, properties: ["2": "character"]}
-new/0: abc def -> 0
-after-brace/0: recipe main
-after-brace/0: new ...
-after-brace/0: index ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 2-5-4, properties: ["1": "address":"array":"character"]} <- new/44 {name: "abc def", value: 0, type: 0, properties: ["abc def": "literal-string"]}
-mem/0: storing 1000 in location 1
-run/0: instruction main/1
-run/0: {name: "2", value: 2, type: 4, properties: ["2": "character"]} <- index/26 {name: "1", value: 1, type: 2-5-4, properties: ["1": "address":"array":"character", "deref": ]}, {name: "5", value: 5, type: 0, properties: ["5": "literal"]}
-run/0: ingredient 0 is {name: "1", value: 1, type: 2-5-4, properties: ["1": "address":"array":"character", "deref": ]}
-mem/0: location 1 is 1000
-run/0: ingredient 1 is {name: "5", value: 5, type: 0, properties: ["5": "literal"]}
-run/0: address to copy is 1006
-run/0: its type is 4
-mem/0: location 1006 is 101
-run/0: product 0 is 101
-mem/0: storing 101 in location 2
diff --git a/cpp/.traces/next_ingredient b/cpp/.traces/next_ingredient
deleted file mode 100644
index 34175e45..00000000
--- a/cpp/.traces/next_ingredient
+++ /dev/null
@@ -1,28 +0,0 @@
-parse/0: instruction: f
-parse/0:   ingredient: {name: "2", value: 0, type: 0, properties: ["2": "literal"]}
-parse/0: instruction: next-ingredient
-parse/0:   product: {name: "12", value: 0, type: 1, properties: ["12": "integer"]}
-parse/0: instruction: add
-parse/0:   ingredient: {name: "1", value: 0, type: 0, properties: ["1": "literal"]}
-parse/0:   ingredient: {name: "12", value: 0, type: 1, properties: ["12": "integer"]}
-parse/0:   product: {name: "13", value: 0, type: 1, properties: ["13": "integer"]}
-after-brace/0: recipe main
-after-brace/0: f ...
-after-brace/0: recipe f
-after-brace/0: next-ingredient ...
-after-brace/0: add ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: f/1001 {name: "2", value: 2, type: 0, properties: ["2": "literal"]}
-run/0: instruction f/0
-run/0: {name: "12", value: 12, type: 1, properties: ["12": "integer"]} <- next-ingredient/30 
-run/0: product 0 is 2
-mem/0: storing 2 in location 12
-run/0: instruction f/1
-run/0: {name: "13", value: 13, type: 1, properties: ["13": "integer"]} <- add/2 {name: "1", value: 1, type: 0, properties: ["1": "literal"]}, {name: "12", value: 12, type: 1, properties: ["12": "integer"]}
-run/0: ingredient 0 is 1
-run/0: ingredient 1 is 12
-mem/0: location 12 is 2
-run/0: product 0 is 3
-mem/0: storing 3 in location 13
diff --git a/cpp/.traces/next_ingredient_missing b/cpp/.traces/next_ingredient_missing
deleted file mode 100644
index 8d120e20..00000000
--- a/cpp/.traces/next_ingredient_missing
+++ /dev/null
@@ -1,15 +0,0 @@
-parse/0: instruction: f
-parse/0: instruction: next-ingredient
-parse/0:   product: {name: "_", value: 0, type: 0, properties: ["_": "dummy"]}
-parse/0:   product: {name: "12", value: 0, type: 1, properties: ["12": "integer"]}
-after-brace/0: recipe main
-after-brace/0: f ...
-after-brace/0: recipe f
-after-brace/0: next-ingredient ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: f/1001 
-run/0: instruction f/0
-run/0: {name: "_", value: 0, type: 0, properties: ["_": "dummy"]}, {name: "12", value: 12, type: 1, properties: ["12": "integer"]} <- next-ingredient/30 
-mem/0: storing 0 in location 12
diff --git a/cpp/.traces/not b/cpp/.traces/not
deleted file mode 100644
index 5450b050..00000000
--- a/cpp/.traces/not
+++ /dev/null
@@ -1,21 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "1", value: 0, type: 0, properties: ["1": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0: instruction: not
-parse/0:   ingredient: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0:   product: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-after-brace/0: recipe main
-after-brace/0: copy ...
-after-brace/0: not ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is 1
-mem/0: storing 1 in location 1
-run/0: instruction main/1
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- not/9 {name: "1", value: 1, type: 1, properties: ["1": "integer"]}
-run/0: ingredient 0 is 1
-mem/0: location 1 is 1
-run/0: product 0 is 0
-mem/0: storing 0 in location 2
diff --git a/cpp/.traces/or b/cpp/.traces/or
deleted file mode 100644
index 72231ceb..00000000
--- a/cpp/.traces/or
+++ /dev/null
@@ -1,32 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "1", value: 0, type: 0, properties: ["1": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-parse/0:   product: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-parse/0: instruction: or
-parse/0:   ingredient: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0:   ingredient: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-parse/0:   product: {name: "3", value: 0, type: 1, properties: ["3": "integer"]}
-after-brace/0: recipe main
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: or ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is 1
-mem/0: storing 1 in location 1
-run/0: instruction main/1
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
-mem/0: storing 0 in location 2
-run/0: instruction main/2
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- or/8 {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "2", value: 2, type: 1, properties: ["2": "integer"]}
-run/0: ingredient 0 is 1
-mem/0: location 1 is 1
-run/0: ingredient 1 is 2
-mem/0: location 2 is 0
-run/0: product 0 is 1
-mem/0: storing 1 in location 3
diff --git a/cpp/.traces/parse_comment_after_instruction b/cpp/.traces/parse_comment_after_instruction
deleted file mode 100644
index 5cfc15c8..00000000
--- a/cpp/.traces/parse_comment_after_instruction
+++ /dev/null
@@ -1,3 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "23", value: 0, type: 0, properties: ["23": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
diff --git a/cpp/.traces/parse_comment_amongst_instruction b/cpp/.traces/parse_comment_amongst_instruction
deleted file mode 100644
index 5cfc15c8..00000000
--- a/cpp/.traces/parse_comment_amongst_instruction
+++ /dev/null
@@ -1,3 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "23", value: 0, type: 0, properties: ["23": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
diff --git a/cpp/.traces/parse_comment_amongst_instruction2 b/cpp/.traces/parse_comment_amongst_instruction2
deleted file mode 100644
index 5cfc15c8..00000000
--- a/cpp/.traces/parse_comment_amongst_instruction2
+++ /dev/null
@@ -1,3 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "23", value: 0, type: 0, properties: ["23": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
diff --git a/cpp/.traces/parse_comment_amongst_instruction3 b/cpp/.traces/parse_comment_amongst_instruction3
deleted file mode 100644
index a00c722c..00000000
--- a/cpp/.traces/parse_comment_amongst_instruction3
+++ /dev/null
@@ -1,6 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "23", value: 0, type: 0, properties: ["23": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "23", value: 0, type: 0, properties: ["23": "literal"]}
-parse/0:   product: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
diff --git a/cpp/.traces/parse_comment_outside_recipe b/cpp/.traces/parse_comment_outside_recipe
deleted file mode 100644
index 5cfc15c8..00000000
--- a/cpp/.traces/parse_comment_outside_recipe
+++ /dev/null
@@ -1,3 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "23", value: 0, type: 0, properties: ["23": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
diff --git a/cpp/.traces/parse_dollar_as_recipe_name b/cpp/.traces/parse_dollar_as_recipe_name
deleted file mode 100644
index a73100d5..00000000
--- a/cpp/.traces/parse_dollar_as_recipe_name
+++ /dev/null
@@ -1 +0,0 @@
-parse/0: instruction: $foo
diff --git a/cpp/.traces/parse_label b/cpp/.traces/parse_label
deleted file mode 100644
index e32481af..00000000
--- a/cpp/.traces/parse_label
+++ /dev/null
@@ -1 +0,0 @@
-parse/0: label: +foo
diff --git a/cpp/.traces/parse_multiple_ingredients b/cpp/.traces/parse_multiple_ingredients
deleted file mode 100644
index 5a71e510..00000000
--- a/cpp/.traces/parse_multiple_ingredients
+++ /dev/null
@@ -1,5 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "23", value: 0, type: 0, properties: ["23": "literal"]}
-parse/0:   ingredient: {name: "4", value: 0, type: 1, properties: ["4": "integer"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0:   product: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
diff --git a/cpp/.traces/parse_multiple_products b/cpp/.traces/parse_multiple_products
deleted file mode 100644
index 24bbdb66..00000000
--- a/cpp/.traces/parse_multiple_products
+++ /dev/null
@@ -1,4 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "23", value: 0, type: 0, properties: ["23": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0:   product: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
diff --git a/cpp/.traces/parse_multiple_properties b/cpp/.traces/parse_multiple_properties
deleted file mode 100644
index e3b452e0..00000000
--- a/cpp/.traces/parse_multiple_properties
+++ /dev/null
@@ -1,3 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "23", value: 0, type: 0, properties: ["23": "literal", "foo": "bar":"baz"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
diff --git a/cpp/.traces/parse_multiple_types b/cpp/.traces/parse_multiple_types
deleted file mode 100644
index 39df838e..00000000
--- a/cpp/.traces/parse_multiple_types
+++ /dev/null
@@ -1,5 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "23", value: 0, type: 0, properties: ["23": "literal"]}
-parse/0:   ingredient: {name: "4", value: 0, type: 1, properties: ["4": "integer"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0:   product: {name: "2", value: 0, type: 2-1, properties: ["2": "address":"integer"]}
diff --git a/cpp/.traces/parse_properties b/cpp/.traces/parse_properties
deleted file mode 100644
index 65d7890e..00000000
--- a/cpp/.traces/parse_properties
+++ /dev/null
@@ -1,3 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "23", value: 0, type: 0, properties: ["23": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1-2, properties: ["1": "integer":"address", "deref": ]}
diff --git a/cpp/.traces/print-character-at-top-left b/cpp/.traces/print-character-at-top-left
deleted file mode 100644
index ac59b8f4..00000000
--- a/cpp/.traces/print-character-at-top-left
+++ /dev/null
@@ -1,595 +0,0 @@
-parse/0: instruction: run
-parse/0:   ingredient: {name: "
-#?     $start-tracing #? 3
-    1:address:screen <- init-fake-screen 3:literal/width, 2:literal/height
-    1:address:screen <- print-character 1:address:screen, 97:literal  # 'a'
-    2:address:array:character <- get 1:address:screen/deref, data:offset
-    3:array:character <- copy 2:address:array:character/deref
-  ", value: 0, type: 0, properties: ["
-#?     $start-tracing #? 3
-    1:address:screen <- init-fake-screen 3:literal/width, 2:literal/height
-    1:address:screen <- print-character 1:address:screen, 97:literal  # 'a'
-    2:address:array:character <- get 1:address:screen/deref, data:offset
-    3:array:character <- copy 2:address:array:character/deref
-  ": "literal-string"]}
-parse/0: instruction: memory-should-contain
-parse/0:   ingredient: {name: "
-    3 <- 6  # width*height
-    4 <- 97  # 'a'
-    5 <- 0
-  ", value: 0, type: 0, properties: ["
-    3 <- 6  # width*height
-    4 <- 97  # 'a'
-    5 <- 0
-  ": "literal-string"]}
-after-brace/0: recipe print-character-at-top-left
-after-brace/0: run ...
-after-brace/0: memory-should-contain ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: print-character-at-top-left
-run/0: instruction print-character-at-top-left/0
-run/0: run/45 {name: "
-#?     $start-tracing #? 3
-    1:address:screen <- init-fake-screen 3:literal/width, 2:literal/height
-    1:address:screen <- print-character 1:address:screen, 97:literal  # 'a'
-    2:address:array:character <- get 1:address:screen/deref, data:offset
-    3:array:character <- copy 2:address:array:character/deref
-  ", value: 0, type: 0, properties: ["
-#?     $start-tracing #? 3
-    1:address:screen <- init-fake-screen 3:literal/width, 2:literal/height
-    1:address:screen <- print-character 1:address:screen, 97:literal  # 'a'
-    2:address:array:character <- get 1:address:screen/deref, data:offset
-    3:array:character <- copy 2:address:array:character/deref
-  ": "literal-string"]}
-parse/0: instruction: init-fake-screen
-parse/0:   ingredient: {name: "3", value: 0, type: 0, properties: ["3": "literal", "width": ]}
-parse/0:   ingredient: {name: "2", value: 0, type: 0, properties: ["2": "literal", "height": ]}
-parse/0:   product: {name: "1", value: 0, type: 2-11, properties: ["1": "address":"screen"]}
-parse/0: instruction: print-character
-parse/0:   ingredient: {name: "1", value: 0, type: 2-11, properties: ["1": "address":"screen"]}
-parse/0:   ingredient: {name: "97", value: 0, type: 0, properties: ["97": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 2-11, properties: ["1": "address":"screen"]}
-parse/0: instruction: get
-parse/0:   ingredient: {name: "1", value: 0, type: 2-11, properties: ["1": "address":"screen", "deref": ]}
-parse/0:   ingredient: {name: "data", value: 0, type: 0, properties: ["data": "offset"]}
-parse/0:   product: {name: "2", value: 0, type: 2-5-4, properties: ["2": "address":"array":"character"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "2", value: 0, type: 2-5-4, properties: ["2": "address":"array":"character", "deref": ]}
-parse/0:   product: {name: "3", value: 0, type: 5-4, properties: ["3": "array":"character"]}
-name/0: element data of type screen is at offset 4
-after-brace/0: recipe run1001
-after-brace/0: init-fake-screen ...
-after-brace/0: print-character ...
-after-brace/0: get ...
-after-brace/0: copy ...
-run/0: instruction run1001/0
-run/0: {name: "1", value: 1, type: 2-11, properties: ["1": "address":"screen"]} <- init-fake-screen/115 {name: "3", value: 3, type: 0, properties: ["3": "literal", "width": ]}, {name: "2", value: 2, type: 0, properties: ["2": "literal", "height": ]}
-run/0: instruction init-fake-screen/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal", "capacity": ]}
-mem/0: array size is 30
-mem/0: new alloc: 1000
-run/0: instruction init-fake-screen/1
-run/0: {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen"]} <- new/44 {name: "screen", value: 11, type: 0, properties: ["screen": "type"]}
-mem/0: new alloc: 1031
-mem/0: storing 1031 in location 1002
-run/0: instruction init-fake-screen/2
-run/0: {name: "width", value: 2, type: 2-1, properties: ["width": "address":"integer"]} <- get-address/25 {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen", "deref": ]}, {name: "num-columns", value: 1, type: 0, properties: ["num-columns": "offset"]}
-run/0: ingredient 0 is result
-mem/0: location 1002 is 1031
-run/0: ingredient 1 is num-columns
-run/0: address to copy is 1032
-run/0: product 0 is 1032
-mem/0: storing 1032 in location 1003
-run/0: instruction init-fake-screen/3
-run/0: {name: "width", value: 2, type: 2-1, properties: ["width": "address":"integer", "deref": ]} <- next-ingredient/30 
-run/0: product 0 is 3
-mem/0: location 1003 is 1032
-mem/0: storing 3 in location 1032
-run/0: instruction init-fake-screen/4
-run/0: {name: "height", value: 3, type: 2-1, properties: ["height": "address":"integer"]} <- get-address/25 {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen", "deref": ]}, {name: "num-rows", value: 0, type: 0, properties: ["num-rows": "offset"]}
-run/0: ingredient 0 is result
-mem/0: location 1002 is 1031
-run/0: ingredient 1 is num-rows
-run/0: address to copy is 1031
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1004
-run/0: instruction init-fake-screen/5
-run/0: {name: "height", value: 3, type: 2-1, properties: ["height": "address":"integer", "deref": ]} <- next-ingredient/30 
-run/0: product 0 is 2
-mem/0: location 1004 is 1031
-mem/0: storing 2 in location 1031
-run/0: instruction init-fake-screen/6
-run/0: {name: "row", value: 4, type: 2-1, properties: ["row": "address":"integer"]} <- get-address/25 {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen", "deref": ]}, {name: "cursor-row", value: 2, type: 0, properties: ["cursor-row": "offset"]}
-run/0: ingredient 0 is result
-mem/0: location 1002 is 1031
-run/0: ingredient 1 is cursor-row
-run/0: address to copy is 1033
-run/0: product 0 is 1033
-mem/0: storing 1033 in location 1005
-run/0: instruction init-fake-screen/7
-run/0: {name: "row", value: 4, type: 2-1, properties: ["row": "address":"integer", "deref": ]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
-mem/0: location 1005 is 1033
-mem/0: storing 0 in location 1033
-run/0: instruction init-fake-screen/8
-run/0: {name: "column", value: 5, type: 2-1, properties: ["column": "address":"integer"]} <- get-address/25 {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen", "deref": ]}, {name: "cursor-column", value: 3, type: 0, properties: ["cursor-column": "offset"]}
-run/0: ingredient 0 is result
-mem/0: location 1002 is 1031
-run/0: ingredient 1 is cursor-column
-run/0: address to copy is 1034
-run/0: product 0 is 1034
-mem/0: storing 1034 in location 1006
-run/0: instruction init-fake-screen/9
-run/0: {name: "column", value: 5, type: 2-1, properties: ["column": "address":"integer", "deref": ]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
-mem/0: location 1006 is 1034
-mem/0: storing 0 in location 1034
-run/0: instruction init-fake-screen/10
-run/0: {name: "bufsize", value: 6, type: 1, properties: ["bufsize": "integer"]} <- multiply/4 {name: "width", value: 2, type: 2-1, properties: ["width": "address":"integer", "deref": ]}, {name: "height", value: 3, type: 2-1, properties: ["height": "address":"integer", "deref": ]}
-run/0: ingredient 0 is width
-mem/0: location 1003 is 1032
-mem/0: location 1032 is 3
-run/0: ingredient 1 is height
-mem/0: location 1004 is 1031
-mem/0: location 1031 is 2
-run/0: ingredient 1 is 2
-run/0: product 0 is 6
-mem/0: storing 6 in location 1007
-run/0: instruction init-fake-screen/11
-run/0: {name: "buf", value: 7, type: 2-2-5-4, properties: ["buf": "address":"address":"array":"character"]} <- get-address/25 {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen", "deref": ]}, {name: "data", value: 4, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is result
-mem/0: location 1002 is 1031
-run/0: ingredient 1 is data
-run/0: address to copy is 1035
-run/0: product 0 is 1035
-mem/0: storing 1035 in location 1008
-run/0: instruction init-fake-screen/12
-run/0: {name: "buf", value: 7, type: 2-2-5-4, properties: ["buf": "address":"address":"array":"character", "deref": ]} <- new/44 {name: "character", value: 0, type: 0, properties: ["character": "literal"]}, {name: "bufsize", value: 6, type: 1, properties: ["bufsize": "integer"]}
-mem/0: location 1007 is 6
-mem/0: array size is 6
-mem/0: new alloc: 1036
-mem/0: location 1008 is 1035
-mem/0: storing 1036 in location 1035
-run/0: instruction init-fake-screen/13
-run/0: clear-screen/116 {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen"]}
-mem/0: location 1002 is 1031
-run/0: instruction clear-screen/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1043
-run/0: instruction clear-screen/1
-run/0: {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]} <- next-ingredient/30 
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1045
-run/0: instruction clear-screen/3
-run/0: break-unless/12 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]}, {name: "", value: 12, type: , properties: ["": ]}
-mem/0: location 1045 is 1031
-run/0: ingredient 0 is 1031
-run/0: jump-unless fell through
-run/0: instruction clear-screen/4
-run/0: {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character"]} <- get/24 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "data", value: 4, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1045 is 1031
-run/0: ingredient 1 is data
-run/0: address to copy is 1035
-run/0: its type is 2
-mem/0: location 1035 is 1036
-run/0: product 0 is 1036
-mem/0: storing 1036 in location 1046
-run/0: instruction clear-screen/5
-run/0: {name: "max", value: 3, type: 1, properties: ["max": "integer"]} <- length/28 {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}
-mem/0: location 1046 is 1036
-mem/0: storing 6 in location 1047
-run/0: instruction clear-screen/6
-run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
-mem/0: storing 0 in location 1048
-run/0: instruction clear-screen/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1048 is 0
-run/0: ingredient 1 is max
-mem/0: location 1047 is 6
-run/0: product 0 is 0
-mem/0: storing 0 in location 1049
-run/0: instruction clear-screen/9
-run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
-mem/0: location 1049 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction clear-screen/10
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address/27 {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is buf
-mem/0: location 1046 is 1036
-run/0: ingredient 1 is {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-mem/0: location 1048 is 0
-run/0: address to copy is 1037
-run/0: product 0 is 1037
-mem/0: storing 1037 in location 1050
-run/0: instruction clear-screen/11
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy/1 {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
-run/0: ingredient 0 is  
-mem/0: location 1050 is 1037
-mem/0: storing 0 in location 1037
-run/0: instruction clear-screen/12
-run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1048 is 0
-run/0: ingredient 1 is 1
-run/0: product 0 is 1
-mem/0: storing 1 in location 1048
-run/0: instruction clear-screen/13
-run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
-run/0: ingredient 0 is -6
-run/0: jumping to instruction 8
-run/0: instruction clear-screen/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1048 is 1
-run/0: ingredient 1 is max
-mem/0: location 1047 is 6
-run/0: product 0 is 0
-mem/0: storing 0 in location 1049
-run/0: instruction clear-screen/9
-run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
-mem/0: location 1049 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction clear-screen/10
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address/27 {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is buf
-mem/0: location 1046 is 1036
-run/0: ingredient 1 is {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-mem/0: location 1048 is 1
-run/0: address to copy is 1038
-run/0: product 0 is 1038
-mem/0: storing 1038 in location 1050
-run/0: instruction clear-screen/11
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy/1 {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
-run/0: ingredient 0 is  
-mem/0: location 1050 is 1038
-mem/0: storing 0 in location 1038
-run/0: instruction clear-screen/12
-run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1048 is 1
-run/0: ingredient 1 is 1
-run/0: product 0 is 2
-mem/0: storing 2 in location 1048
-run/0: instruction clear-screen/13
-run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
-run/0: ingredient 0 is -6
-run/0: jumping to instruction 8
-run/0: instruction clear-screen/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1048 is 2
-run/0: ingredient 1 is max
-mem/0: location 1047 is 6
-run/0: product 0 is 0
-mem/0: storing 0 in location 1049
-run/0: instruction clear-screen/9
-run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
-mem/0: location 1049 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction clear-screen/10
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address/27 {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is buf
-mem/0: location 1046 is 1036
-run/0: ingredient 1 is {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-mem/0: location 1048 is 2
-run/0: address to copy is 1039
-run/0: product 0 is 1039
-mem/0: storing 1039 in location 1050
-run/0: instruction clear-screen/11
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy/1 {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
-run/0: ingredient 0 is  
-mem/0: location 1050 is 1039
-mem/0: storing 0 in location 1039
-run/0: instruction clear-screen/12
-run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1048 is 2
-run/0: ingredient 1 is 1
-run/0: product 0 is 3
-mem/0: storing 3 in location 1048
-run/0: instruction clear-screen/13
-run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
-run/0: ingredient 0 is -6
-run/0: jumping to instruction 8
-run/0: instruction clear-screen/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1048 is 3
-run/0: ingredient 1 is max
-mem/0: location 1047 is 6
-run/0: product 0 is 0
-mem/0: storing 0 in location 1049
-run/0: instruction clear-screen/9
-run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
-mem/0: location 1049 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction clear-screen/10
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address/27 {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is buf
-mem/0: location 1046 is 1036
-run/0: ingredient 1 is {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-mem/0: location 1048 is 3
-run/0: address to copy is 1040
-run/0: product 0 is 1040
-mem/0: storing 1040 in location 1050
-run/0: instruction clear-screen/11
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy/1 {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
-run/0: ingredient 0 is  
-mem/0: location 1050 is 1040
-mem/0: storing 0 in location 1040
-run/0: instruction clear-screen/12
-run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1048 is 3
-run/0: ingredient 1 is 1
-run/0: product 0 is 4
-mem/0: storing 4 in location 1048
-run/0: instruction clear-screen/13
-run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
-run/0: ingredient 0 is -6
-run/0: jumping to instruction 8
-run/0: instruction clear-screen/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1048 is 4
-run/0: ingredient 1 is max
-mem/0: location 1047 is 6
-run/0: product 0 is 0
-mem/0: storing 0 in location 1049
-run/0: instruction clear-screen/9
-run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
-mem/0: location 1049 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction clear-screen/10
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address/27 {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is buf
-mem/0: location 1046 is 1036
-run/0: ingredient 1 is {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-mem/0: location 1048 is 4
-run/0: address to copy is 1041
-run/0: product 0 is 1041
-mem/0: storing 1041 in location 1050
-run/0: instruction clear-screen/11
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy/1 {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
-run/0: ingredient 0 is  
-mem/0: location 1050 is 1041
-mem/0: storing 0 in location 1041
-run/0: instruction clear-screen/12
-run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1048 is 4
-run/0: ingredient 1 is 1
-run/0: product 0 is 5
-mem/0: storing 5 in location 1048
-run/0: instruction clear-screen/13
-run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
-run/0: ingredient 0 is -6
-run/0: jumping to instruction 8
-run/0: instruction clear-screen/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1048 is 5
-run/0: ingredient 1 is max
-mem/0: location 1047 is 6
-run/0: product 0 is 0
-mem/0: storing 0 in location 1049
-run/0: instruction clear-screen/9
-run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
-mem/0: location 1049 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction clear-screen/10
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address/27 {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is buf
-mem/0: location 1046 is 1036
-run/0: ingredient 1 is {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-mem/0: location 1048 is 5
-run/0: address to copy is 1042
-run/0: product 0 is 1042
-mem/0: storing 1042 in location 1050
-run/0: instruction clear-screen/11
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy/1 {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
-run/0: ingredient 0 is  
-mem/0: location 1050 is 1042
-mem/0: storing 0 in location 1042
-run/0: instruction clear-screen/12
-run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1048 is 5
-run/0: ingredient 1 is 1
-run/0: product 0 is 6
-mem/0: storing 6 in location 1048
-run/0: instruction clear-screen/13
-run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
-run/0: ingredient 0 is -6
-run/0: jumping to instruction 8
-run/0: instruction clear-screen/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1048 is 6
-run/0: ingredient 1 is max
-mem/0: location 1047 is 6
-run/0: product 0 is 1
-mem/0: storing 1 in location 1049
-run/0: instruction clear-screen/9
-run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
-mem/0: location 1049 is 1
-run/0: ingredient 0 is 1
-run/0: ingredient 1 is 
-run/0: jumping to instruction 14
-run/0: instruction clear-screen/15
-run/0: reply/33 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "same-as-ingredient": "0"]}
-mem/0: location 1045 is 1031
-run/0: instruction init-fake-screen/14
-run/0: reply/33 {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen"]}
-mem/0: location 1002 is 1031
-run/0: result 0 is 1031
-mem/0: storing 1031 in location 1
-run/0: instruction run1001/1
-run/0: {name: "1", value: 1, type: 2-11, properties: ["1": "address":"screen"]} <- print-character/117 {name: "1", value: 1, type: 2-11, properties: ["1": "address":"screen"]}, {name: "97", value: 97, type: 0, properties: ["97": "literal"]}
-mem/0: location 1 is 1031
-run/0: instruction print-character/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1074
-run/0: instruction print-character/1
-run/0: {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]} <- next-ingredient/30 
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1076
-run/0: instruction print-character/2
-run/0: {name: "c", value: 2, type: 4, properties: ["c": "character"]} <- next-ingredient/30 
-run/0: product 0 is 97
-mem/0: storing 97 in location 1077
-run/0: instruction print-character/4
-run/0: break-unless/12 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]}, {name: "", value: 14, type: , properties: ["": ]}
-mem/0: location 1076 is 1031
-run/0: ingredient 0 is 1031
-run/0: jump-unless fell through
-run/0: instruction print-character/5
-run/0: {name: "row", value: 3, type: 2-1, properties: ["row": "address":"integer"]} <- get-address/25 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "cursor-row", value: 2, type: 0, properties: ["cursor-row": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1076 is 1031
-run/0: ingredient 1 is cursor-row
-run/0: address to copy is 1033
-run/0: product 0 is 1033
-mem/0: storing 1033 in location 1078
-run/0: instruction print-character/6
-run/0: {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer"]} <- get-address/25 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "cursor-column", value: 3, type: 0, properties: ["cursor-column": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1076 is 1031
-run/0: ingredient 1 is cursor-column
-run/0: address to copy is 1034
-run/0: product 0 is 1034
-mem/0: storing 1034 in location 1079
-run/0: instruction print-character/7
-run/0: {name: "width", value: 5, type: 1, properties: ["width": "integer"]} <- get/24 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "num-columns", value: 1, type: 0, properties: ["num-columns": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1076 is 1031
-run/0: ingredient 1 is num-columns
-run/0: address to copy is 1032
-run/0: its type is 1
-mem/0: location 1032 is 3
-run/0: product 0 is 3
-mem/0: storing 3 in location 1080
-run/0: instruction print-character/8
-run/0: {name: "index", value: 6, type: 1, properties: ["index": "integer"]} <- multiply/4 {name: "row", value: 3, type: 2-1, properties: ["row": "address":"integer", "deref": ]}, {name: "width", value: 5, type: 1, properties: ["width": "integer"]}
-run/0: ingredient 0 is row
-mem/0: location 1078 is 1033
-mem/0: location 1033 is 0
-run/0: ingredient 1 is width
-mem/0: location 1080 is 3
-run/0: ingredient 1 is 3
-run/0: product 0 is 0
-mem/0: storing 0 in location 1081
-run/0: instruction print-character/9
-run/0: {name: "index", value: 6, type: 1, properties: ["index": "integer"]} <- add/2 {name: "index", value: 6, type: 1, properties: ["index": "integer"]}, {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]}
-run/0: ingredient 0 is index
-mem/0: location 1081 is 0
-run/0: ingredient 1 is column
-mem/0: location 1079 is 1034
-mem/0: location 1034 is 0
-run/0: product 0 is 0
-mem/0: storing 0 in location 1081
-run/0: instruction print-character/10
-run/0: {name: "buf", value: 7, type: 2-5-4, properties: ["buf": "address":"array":"character"]} <- get/24 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "data", value: 4, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1076 is 1031
-run/0: ingredient 1 is data
-run/0: address to copy is 1035
-run/0: its type is 2
-mem/0: location 1035 is 1036
-run/0: product 0 is 1036
-mem/0: storing 1036 in location 1082
-run/0: instruction print-character/11
-run/0: {name: "cursor", value: 8, type: 2-4, properties: ["cursor": "address":"character"]} <- index-address/27 {name: "buf", value: 7, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "index", value: 6, type: 1, properties: ["index": "integer"]}
-run/0: ingredient 0 is buf
-mem/0: location 1082 is 1036
-run/0: ingredient 1 is {name: "index", value: 6, type: 1, properties: ["index": "integer"]}
-mem/0: location 1081 is 0
-run/0: address to copy is 1037
-run/0: product 0 is 1037
-mem/0: storing 1037 in location 1083
-run/0: instruction print-character/12
-run/0: {name: "cursor", value: 8, type: 2-4, properties: ["cursor": "address":"character", "deref": ]} <- copy/1 {name: "c", value: 2, type: 4, properties: ["c": "character"]}
-run/0: ingredient 0 is c
-mem/0: location 1077 is 97
-mem/0: location 1083 is 1037
-mem/0: storing 97 in location 1037
-run/0: instruction print-character/14
-run/0: {name: "at-right?", value: 9, type: 3, properties: ["at-right?": "boolean"]} <- equal/13 {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]}, {name: "width", value: 5, type: 1, properties: ["width": "integer"]}
-run/0: ingredient 0 is column
-mem/0: location 1079 is 1034
-mem/0: location 1034 is 0
-run/0: ingredient 1 is width
-mem/0: location 1080 is 3
-run/0: product 0 is 0
-mem/0: storing 0 in location 1084
-run/0: instruction print-character/15
-run/0: break-if/11 {name: "at-right?", value: 9, type: 3, properties: ["at-right?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
-mem/0: location 1084 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction print-character/16
-run/0: {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]} <- add/2 {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is column
-mem/0: location 1079 is 1034
-mem/0: location 1034 is 0
-run/0: ingredient 1 is 1
-run/0: product 0 is 1
-mem/0: location 1079 is 1034
-mem/0: storing 1 in location 1034
-run/0: instruction print-character/18
-run/0: reply/33 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "same-as-ingredient": "0"]}
-mem/0: location 1076 is 1031
-run/0: result 0 is 1031
-mem/0: storing 1031 in location 1
-run/0: instruction run1001/2
-run/0: {name: "2", value: 2, type: 2-5-4, properties: ["2": "address":"array":"character"]} <- get/24 {name: "1", value: 1, type: 2-11, properties: ["1": "address":"screen", "deref": ]}, {name: "data", value: 4, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is 1
-mem/0: location 1 is 1031
-run/0: ingredient 1 is data
-run/0: address to copy is 1035
-run/0: its type is 2
-mem/0: location 1035 is 1036
-run/0: product 0 is 1036
-mem/0: storing 1036 in location 2
-run/0: instruction run1001/3
-run/0: {name: "3", value: 3, type: 5-4, properties: ["3": "array":"character"]} <- copy/1 {name: "2", value: 2, type: 2-5-4, properties: ["2": "address":"array":"character", "deref": ]}
-run/0: ingredient 0 is 2
-mem/0: location 2 is 1036
-mem/0: location 1036 is 6
-mem/0: location 1037 is 97
-mem/0: location 1038 is 0
-mem/0: location 1039 is 0
-mem/0: location 1040 is 0
-mem/0: location 1041 is 0
-mem/0: location 1042 is 0
-mem/0: storing 6 in location 3
-mem/0: storing 97 in location 4
-mem/0: storing 0 in location 5
-mem/0: storing 0 in location 6
-mem/0: storing 0 in location 7
-mem/0: storing 0 in location 8
-mem/0: storing 0 in location 9
-run/0: instruction print-character-at-top-left/1
-run/0: memory-should-contain/46 {name: "
-    3 <- 6  # width*height
-    4 <- 97  # 'a'
-    5 <- 0
-  ", value: 0, type: 0, properties: ["
-    3 <- 6  # width*height
-    4 <- 97  # 'a'
-    5 <- 0
-  ": "literal-string"]}
-run/0: checking location 3
-run/0: checking location 4
-run/0: checking location 5
diff --git a/cpp/.traces/print-character-at-top-left2 b/cpp/.traces/print-character-at-top-left2
deleted file mode 100644
index 898384e3..00000000
--- a/cpp/.traces/print-character-at-top-left2
+++ /dev/null
@@ -1,540 +0,0 @@
-parse/0: instruction: assume-screen
-parse/0:   ingredient: {name: "3", value: 0, type: 0, properties: ["3": "literal", "width": ]}
-parse/0:   ingredient: {name: "2", value: 0, type: 0, properties: ["2": "literal", "height": ]}
-parse/0: instruction: run
-parse/0:   ingredient: {name: "
-    screen:address <- print-character screen:address, 97:literal  # 'a'
-  ", value: 0, type: 0, properties: ["
-    screen:address <- print-character screen:address, 97:literal  # 'a'
-  ": "literal-string"]}
-parse/0: instruction: screen-should-contain
-parse/0:   ingredient: {name: "
-    .a  .
-    .   .
-  ", value: 0, type: 0, properties: ["
-    .a  .
-    .   .
-  ": "literal-string"]}
-after-brace/0: recipe print-character-at-top-left2
-after-brace/0: assume-screen ...
-after-brace/0: run ...
-after-brace/0: screen-should-contain ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: print-character-at-top-left2
-run/0: instruction print-character-at-top-left2/0
-run/0: {name: "screen", value: 900, type: 2, properties: ["screen": "address"]} <- assume-screen/115 {name: "3", value: 3, type: 0, properties: ["3": "literal", "width": ]}, {name: "2", value: 2, type: 0, properties: ["2": "literal", "height": ]}
-run/0: instruction init-fake-screen/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal", "capacity": ]}
-mem/0: array size is 30
-mem/0: new alloc: 1000
-run/0: instruction init-fake-screen/1
-run/0: {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen"]} <- new/44 {name: "screen", value: 11, type: 0, properties: ["screen": "type"]}
-mem/0: new alloc: 1031
-mem/0: storing 1031 in location 1002
-run/0: instruction init-fake-screen/2
-run/0: {name: "width", value: 2, type: 2-1, properties: ["width": "address":"integer"]} <- get-address/25 {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen", "deref": ]}, {name: "num-columns", value: 1, type: 0, properties: ["num-columns": "offset"]}
-run/0: ingredient 0 is result
-mem/0: location 1002 is 1031
-run/0: ingredient 1 is num-columns
-run/0: address to copy is 1032
-run/0: product 0 is 1032
-mem/0: storing 1032 in location 1003
-run/0: instruction init-fake-screen/3
-run/0: {name: "width", value: 2, type: 2-1, properties: ["width": "address":"integer", "deref": ]} <- next-ingredient/30 
-run/0: product 0 is 3
-mem/0: location 1003 is 1032
-mem/0: storing 3 in location 1032
-run/0: instruction init-fake-screen/4
-run/0: {name: "height", value: 3, type: 2-1, properties: ["height": "address":"integer"]} <- get-address/25 {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen", "deref": ]}, {name: "num-rows", value: 0, type: 0, properties: ["num-rows": "offset"]}
-run/0: ingredient 0 is result
-mem/0: location 1002 is 1031
-run/0: ingredient 1 is num-rows
-run/0: address to copy is 1031
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1004
-run/0: instruction init-fake-screen/5
-run/0: {name: "height", value: 3, type: 2-1, properties: ["height": "address":"integer", "deref": ]} <- next-ingredient/30 
-run/0: product 0 is 2
-mem/0: location 1004 is 1031
-mem/0: storing 2 in location 1031
-run/0: instruction init-fake-screen/6
-run/0: {name: "row", value: 4, type: 2-1, properties: ["row": "address":"integer"]} <- get-address/25 {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen", "deref": ]}, {name: "cursor-row", value: 2, type: 0, properties: ["cursor-row": "offset"]}
-run/0: ingredient 0 is result
-mem/0: location 1002 is 1031
-run/0: ingredient 1 is cursor-row
-run/0: address to copy is 1033
-run/0: product 0 is 1033
-mem/0: storing 1033 in location 1005
-run/0: instruction init-fake-screen/7
-run/0: {name: "row", value: 4, type: 2-1, properties: ["row": "address":"integer", "deref": ]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
-mem/0: location 1005 is 1033
-mem/0: storing 0 in location 1033
-run/0: instruction init-fake-screen/8
-run/0: {name: "column", value: 5, type: 2-1, properties: ["column": "address":"integer"]} <- get-address/25 {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen", "deref": ]}, {name: "cursor-column", value: 3, type: 0, properties: ["cursor-column": "offset"]}
-run/0: ingredient 0 is result
-mem/0: location 1002 is 1031
-run/0: ingredient 1 is cursor-column
-run/0: address to copy is 1034
-run/0: product 0 is 1034
-mem/0: storing 1034 in location 1006
-run/0: instruction init-fake-screen/9
-run/0: {name: "column", value: 5, type: 2-1, properties: ["column": "address":"integer", "deref": ]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
-mem/0: location 1006 is 1034
-mem/0: storing 0 in location 1034
-run/0: instruction init-fake-screen/10
-run/0: {name: "bufsize", value: 6, type: 1, properties: ["bufsize": "integer"]} <- multiply/4 {name: "width", value: 2, type: 2-1, properties: ["width": "address":"integer", "deref": ]}, {name: "height", value: 3, type: 2-1, properties: ["height": "address":"integer", "deref": ]}
-run/0: ingredient 0 is width
-mem/0: location 1003 is 1032
-mem/0: location 1032 is 3
-run/0: ingredient 1 is height
-mem/0: location 1004 is 1031
-mem/0: location 1031 is 2
-run/0: ingredient 1 is 2
-run/0: product 0 is 6
-mem/0: storing 6 in location 1007
-run/0: instruction init-fake-screen/11
-run/0: {name: "buf", value: 7, type: 2-2-5-4, properties: ["buf": "address":"address":"array":"character"]} <- get-address/25 {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen", "deref": ]}, {name: "data", value: 4, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is result
-mem/0: location 1002 is 1031
-run/0: ingredient 1 is data
-run/0: address to copy is 1035
-run/0: product 0 is 1035
-mem/0: storing 1035 in location 1008
-run/0: instruction init-fake-screen/12
-run/0: {name: "buf", value: 7, type: 2-2-5-4, properties: ["buf": "address":"address":"array":"character", "deref": ]} <- new/44 {name: "character", value: 0, type: 0, properties: ["character": "literal"]}, {name: "bufsize", value: 6, type: 1, properties: ["bufsize": "integer"]}
-mem/0: location 1007 is 6
-mem/0: array size is 6
-mem/0: new alloc: 1036
-mem/0: location 1008 is 1035
-mem/0: storing 1036 in location 1035
-run/0: instruction init-fake-screen/13
-run/0: clear-screen/116 {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen"]}
-mem/0: location 1002 is 1031
-run/0: instruction clear-screen/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1043
-run/0: instruction clear-screen/1
-run/0: {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]} <- next-ingredient/30 
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1045
-run/0: instruction clear-screen/3
-run/0: break-unless/12 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]}, {name: "", value: 12, type: , properties: ["": ]}
-mem/0: location 1045 is 1031
-run/0: ingredient 0 is 1031
-run/0: jump-unless fell through
-run/0: instruction clear-screen/4
-run/0: {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character"]} <- get/24 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "data", value: 4, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1045 is 1031
-run/0: ingredient 1 is data
-run/0: address to copy is 1035
-run/0: its type is 2
-mem/0: location 1035 is 1036
-run/0: product 0 is 1036
-mem/0: storing 1036 in location 1046
-run/0: instruction clear-screen/5
-run/0: {name: "max", value: 3, type: 1, properties: ["max": "integer"]} <- length/28 {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}
-mem/0: location 1046 is 1036
-mem/0: storing 6 in location 1047
-run/0: instruction clear-screen/6
-run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
-mem/0: storing 0 in location 1048
-run/0: instruction clear-screen/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1048 is 0
-run/0: ingredient 1 is max
-mem/0: location 1047 is 6
-run/0: product 0 is 0
-mem/0: storing 0 in location 1049
-run/0: instruction clear-screen/9
-run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
-mem/0: location 1049 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction clear-screen/10
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address/27 {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is buf
-mem/0: location 1046 is 1036
-run/0: ingredient 1 is {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-mem/0: location 1048 is 0
-run/0: address to copy is 1037
-run/0: product 0 is 1037
-mem/0: storing 1037 in location 1050
-run/0: instruction clear-screen/11
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy/1 {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
-run/0: ingredient 0 is  
-mem/0: location 1050 is 1037
-mem/0: storing 0 in location 1037
-run/0: instruction clear-screen/12
-run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1048 is 0
-run/0: ingredient 1 is 1
-run/0: product 0 is 1
-mem/0: storing 1 in location 1048
-run/0: instruction clear-screen/13
-run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
-run/0: ingredient 0 is -6
-run/0: jumping to instruction 8
-run/0: instruction clear-screen/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1048 is 1
-run/0: ingredient 1 is max
-mem/0: location 1047 is 6
-run/0: product 0 is 0
-mem/0: storing 0 in location 1049
-run/0: instruction clear-screen/9
-run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
-mem/0: location 1049 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction clear-screen/10
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address/27 {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is buf
-mem/0: location 1046 is 1036
-run/0: ingredient 1 is {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-mem/0: location 1048 is 1
-run/0: address to copy is 1038
-run/0: product 0 is 1038
-mem/0: storing 1038 in location 1050
-run/0: instruction clear-screen/11
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy/1 {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
-run/0: ingredient 0 is  
-mem/0: location 1050 is 1038
-mem/0: storing 0 in location 1038
-run/0: instruction clear-screen/12
-run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1048 is 1
-run/0: ingredient 1 is 1
-run/0: product 0 is 2
-mem/0: storing 2 in location 1048
-run/0: instruction clear-screen/13
-run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
-run/0: ingredient 0 is -6
-run/0: jumping to instruction 8
-run/0: instruction clear-screen/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1048 is 2
-run/0: ingredient 1 is max
-mem/0: location 1047 is 6
-run/0: product 0 is 0
-mem/0: storing 0 in location 1049
-run/0: instruction clear-screen/9
-run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
-mem/0: location 1049 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction clear-screen/10
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address/27 {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is buf
-mem/0: location 1046 is 1036
-run/0: ingredient 1 is {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-mem/0: location 1048 is 2
-run/0: address to copy is 1039
-run/0: product 0 is 1039
-mem/0: storing 1039 in location 1050
-run/0: instruction clear-screen/11
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy/1 {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
-run/0: ingredient 0 is  
-mem/0: location 1050 is 1039
-mem/0: storing 0 in location 1039
-run/0: instruction clear-screen/12
-run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1048 is 2
-run/0: ingredient 1 is 1
-run/0: product 0 is 3
-mem/0: storing 3 in location 1048
-run/0: instruction clear-screen/13
-run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
-run/0: ingredient 0 is -6
-run/0: jumping to instruction 8
-run/0: instruction clear-screen/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1048 is 3
-run/0: ingredient 1 is max
-mem/0: location 1047 is 6
-run/0: product 0 is 0
-mem/0: storing 0 in location 1049
-run/0: instruction clear-screen/9
-run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
-mem/0: location 1049 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction clear-screen/10
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address/27 {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is buf
-mem/0: location 1046 is 1036
-run/0: ingredient 1 is {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-mem/0: location 1048 is 3
-run/0: address to copy is 1040
-run/0: product 0 is 1040
-mem/0: storing 1040 in location 1050
-run/0: instruction clear-screen/11
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy/1 {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
-run/0: ingredient 0 is  
-mem/0: location 1050 is 1040
-mem/0: storing 0 in location 1040
-run/0: instruction clear-screen/12
-run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1048 is 3
-run/0: ingredient 1 is 1
-run/0: product 0 is 4
-mem/0: storing 4 in location 1048
-run/0: instruction clear-screen/13
-run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
-run/0: ingredient 0 is -6
-run/0: jumping to instruction 8
-run/0: instruction clear-screen/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1048 is 4
-run/0: ingredient 1 is max
-mem/0: location 1047 is 6
-run/0: product 0 is 0
-mem/0: storing 0 in location 1049
-run/0: instruction clear-screen/9
-run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
-mem/0: location 1049 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction clear-screen/10
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address/27 {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is buf
-mem/0: location 1046 is 1036
-run/0: ingredient 1 is {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-mem/0: location 1048 is 4
-run/0: address to copy is 1041
-run/0: product 0 is 1041
-mem/0: storing 1041 in location 1050
-run/0: instruction clear-screen/11
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy/1 {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
-run/0: ingredient 0 is  
-mem/0: location 1050 is 1041
-mem/0: storing 0 in location 1041
-run/0: instruction clear-screen/12
-run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1048 is 4
-run/0: ingredient 1 is 1
-run/0: product 0 is 5
-mem/0: storing 5 in location 1048
-run/0: instruction clear-screen/13
-run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
-run/0: ingredient 0 is -6
-run/0: jumping to instruction 8
-run/0: instruction clear-screen/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1048 is 5
-run/0: ingredient 1 is max
-mem/0: location 1047 is 6
-run/0: product 0 is 0
-mem/0: storing 0 in location 1049
-run/0: instruction clear-screen/9
-run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
-mem/0: location 1049 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction clear-screen/10
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address/27 {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is buf
-mem/0: location 1046 is 1036
-run/0: ingredient 1 is {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-mem/0: location 1048 is 5
-run/0: address to copy is 1042
-run/0: product 0 is 1042
-mem/0: storing 1042 in location 1050
-run/0: instruction clear-screen/11
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy/1 {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
-run/0: ingredient 0 is  
-mem/0: location 1050 is 1042
-mem/0: storing 0 in location 1042
-run/0: instruction clear-screen/12
-run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1048 is 5
-run/0: ingredient 1 is 1
-run/0: product 0 is 6
-mem/0: storing 6 in location 1048
-run/0: instruction clear-screen/13
-run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
-run/0: ingredient 0 is -6
-run/0: jumping to instruction 8
-run/0: instruction clear-screen/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1048 is 6
-run/0: ingredient 1 is max
-mem/0: location 1047 is 6
-run/0: product 0 is 1
-mem/0: storing 1 in location 1049
-run/0: instruction clear-screen/9
-run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
-mem/0: location 1049 is 1
-run/0: ingredient 0 is 1
-run/0: ingredient 1 is 
-run/0: jumping to instruction 14
-run/0: instruction clear-screen/15
-run/0: reply/33 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "same-as-ingredient": "0"]}
-mem/0: location 1045 is 1031
-run/0: instruction init-fake-screen/14
-run/0: reply/33 {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen"]}
-mem/0: location 1002 is 1031
-run/0: result 0 is 1031
-mem/0: storing 1031 in location 900
-run/0: instruction print-character-at-top-left2/1
-run/0: run/45 {name: "
-    screen:address <- print-character screen:address, 97:literal  # 'a'
-  ", value: 0, type: 0, properties: ["
-    screen:address <- print-character screen:address, 97:literal  # 'a'
-  ": "literal-string"]}
-parse/0: instruction: print-character
-parse/0:   ingredient: {name: "screen", value: 0, type: 2, properties: ["screen": "address"]}
-parse/0:   ingredient: {name: "97", value: 0, type: 0, properties: ["97": "literal"]}
-parse/0:   product: {name: "screen", value: 0, type: 2, properties: ["screen": "address"]}
-after-brace/0: recipe run1001
-after-brace/0: print-character ...
-run/0: instruction run1001/0
-run/0: {name: "screen", value: 900, type: 2, properties: ["screen": "address"]} <- print-character/117 {name: "screen", value: 900, type: 2, properties: ["screen": "address"]}, {name: "97", value: 97, type: 0, properties: ["97": "literal"]}
-mem/0: location 900 is 1031
-run/0: instruction print-character/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1074
-run/0: instruction print-character/1
-run/0: {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]} <- next-ingredient/30 
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1076
-run/0: instruction print-character/2
-run/0: {name: "c", value: 2, type: 4, properties: ["c": "character"]} <- next-ingredient/30 
-run/0: product 0 is 97
-mem/0: storing 97 in location 1077
-run/0: instruction print-character/4
-run/0: break-unless/12 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]}, {name: "", value: 14, type: , properties: ["": ]}
-mem/0: location 1076 is 1031
-run/0: ingredient 0 is 1031
-run/0: jump-unless fell through
-run/0: instruction print-character/5
-run/0: {name: "row", value: 3, type: 2-1, properties: ["row": "address":"integer"]} <- get-address/25 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "cursor-row", value: 2, type: 0, properties: ["cursor-row": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1076 is 1031
-run/0: ingredient 1 is cursor-row
-run/0: address to copy is 1033
-run/0: product 0 is 1033
-mem/0: storing 1033 in location 1078
-run/0: instruction print-character/6
-run/0: {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer"]} <- get-address/25 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "cursor-column", value: 3, type: 0, properties: ["cursor-column": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1076 is 1031
-run/0: ingredient 1 is cursor-column
-run/0: address to copy is 1034
-run/0: product 0 is 1034
-mem/0: storing 1034 in location 1079
-run/0: instruction print-character/7
-run/0: {name: "width", value: 5, type: 1, properties: ["width": "integer"]} <- get/24 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "num-columns", value: 1, type: 0, properties: ["num-columns": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1076 is 1031
-run/0: ingredient 1 is num-columns
-run/0: address to copy is 1032
-run/0: its type is 1
-mem/0: location 1032 is 3
-run/0: product 0 is 3
-mem/0: storing 3 in location 1080
-run/0: instruction print-character/8
-run/0: {name: "index", value: 6, type: 1, properties: ["index": "integer"]} <- multiply/4 {name: "row", value: 3, type: 2-1, properties: ["row": "address":"integer", "deref": ]}, {name: "width", value: 5, type: 1, properties: ["width": "integer"]}
-run/0: ingredient 0 is row
-mem/0: location 1078 is 1033
-mem/0: location 1033 is 0
-run/0: ingredient 1 is width
-mem/0: location 1080 is 3
-run/0: ingredient 1 is 3
-run/0: product 0 is 0
-mem/0: storing 0 in location 1081
-run/0: instruction print-character/9
-run/0: {name: "index", value: 6, type: 1, properties: ["index": "integer"]} <- add/2 {name: "index", value: 6, type: 1, properties: ["index": "integer"]}, {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]}
-run/0: ingredient 0 is index
-mem/0: location 1081 is 0
-run/0: ingredient 1 is column
-mem/0: location 1079 is 1034
-mem/0: location 1034 is 0
-run/0: product 0 is 0
-mem/0: storing 0 in location 1081
-run/0: instruction print-character/10
-run/0: {name: "buf", value: 7, type: 2-5-4, properties: ["buf": "address":"array":"character"]} <- get/24 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "data", value: 4, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1076 is 1031
-run/0: ingredient 1 is data
-run/0: address to copy is 1035
-run/0: its type is 2
-mem/0: location 1035 is 1036
-run/0: product 0 is 1036
-mem/0: storing 1036 in location 1082
-run/0: instruction print-character/11
-run/0: {name: "cursor", value: 8, type: 2-4, properties: ["cursor": "address":"character"]} <- index-address/27 {name: "buf", value: 7, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "index", value: 6, type: 1, properties: ["index": "integer"]}
-run/0: ingredient 0 is buf
-mem/0: location 1082 is 1036
-run/0: ingredient 1 is {name: "index", value: 6, type: 1, properties: ["index": "integer"]}
-mem/0: location 1081 is 0
-run/0: address to copy is 1037
-run/0: product 0 is 1037
-mem/0: storing 1037 in location 1083
-run/0: instruction print-character/12
-run/0: {name: "cursor", value: 8, type: 2-4, properties: ["cursor": "address":"character", "deref": ]} <- copy/1 {name: "c", value: 2, type: 4, properties: ["c": "character"]}
-run/0: ingredient 0 is c
-mem/0: location 1077 is 97
-mem/0: location 1083 is 1037
-mem/0: storing 97 in location 1037
-run/0: instruction print-character/14
-run/0: {name: "at-right?", value: 9, type: 3, properties: ["at-right?": "boolean"]} <- equal/13 {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]}, {name: "width", value: 5, type: 1, properties: ["width": "integer"]}
-run/0: ingredient 0 is column
-mem/0: location 1079 is 1034
-mem/0: location 1034 is 0
-run/0: ingredient 1 is width
-mem/0: location 1080 is 3
-run/0: product 0 is 0
-mem/0: storing 0 in location 1084
-run/0: instruction print-character/15
-run/0: break-if/11 {name: "at-right?", value: 9, type: 3, properties: ["at-right?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
-mem/0: location 1084 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction print-character/16
-run/0: {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]} <- add/2 {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is column
-mem/0: location 1079 is 1034
-mem/0: location 1034 is 0
-run/0: ingredient 1 is 1
-run/0: product 0 is 1
-mem/0: location 1079 is 1034
-mem/0: storing 1 in location 1034
-run/0: instruction print-character/18
-run/0: reply/33 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "same-as-ingredient": "0"]}
-mem/0: location 1076 is 1031
-run/0: result 0 is 1031
-mem/0: storing 1031 in location 900
-run/0: instruction print-character-at-top-left2/2
-run/0: screen-should-contain/62 {name: "
-    .a  .
-    .   .
-  ", value: 0, type: 0, properties: ["
-    .a  .
-    .   .
-  ": "literal-string"]}
-run/0: checking screen size at 1036
-run/0: checking location 1037
-run/0: checking location 1038
-run/0: checking location 1039
-run/0: checking location 1040
-run/0: checking location 1041
-run/0: checking location 1042
diff --git a/cpp/.traces/read-key-in-mu b/cpp/.traces/read-key-in-mu
deleted file mode 100644
index c1b0b274..00000000
--- a/cpp/.traces/read-key-in-mu
+++ /dev/null
@@ -1,465 +0,0 @@
-parse/0: instruction: assume-keyboard
-parse/0:   ingredient: {name: "abc", value: 0, type: 0, properties: ["abc": "literal-string"]}
-parse/0: instruction: run
-parse/0:   ingredient: {name: "
-    1:character, 2:boolean, keyboard:address <- read-key keyboard:address
-    3:character, 4:boolean, keyboard:address <- read-key keyboard:address
-    5:character, 6:boolean, keyboard:address <- read-key keyboard:address
-    7:character, 8:boolean, keyboard:address <- read-key keyboard:address
-  ", value: 0, type: 0, properties: ["
-    1:character, 2:boolean, keyboard:address <- read-key keyboard:address
-    3:character, 4:boolean, keyboard:address <- read-key keyboard:address
-    5:character, 6:boolean, keyboard:address <- read-key keyboard:address
-    7:character, 8:boolean, keyboard:address <- read-key keyboard:address
-  ": "literal-string"]}
-parse/0: instruction: memory-should-contain
-parse/0:   ingredient: {name: "
-    1 <- 97  # 'a'
-    2 <- 1  # first read-key call found a character
-    3 <- 98  # 'b'
-    4 <- 1  # second read-key call found a character
-    5 <- 99  # 'c'
-    6 <- 1  # third read-key call found a character
-    7 <- 0
-    8 <- 0  # fourth read-key call didn't find a character
-  ", value: 0, type: 0, properties: ["
-    1 <- 97  # 'a'
-    2 <- 1  # first read-key call found a character
-    3 <- 98  # 'b'
-    4 <- 1  # second read-key call found a character
-    5 <- 99  # 'c'
-    6 <- 1  # third read-key call found a character
-    7 <- 0
-    8 <- 0  # fourth read-key call didn't find a character
-  ": "literal-string"]}
-new/0: abc -> 0
-after-brace/0: recipe read-key-in-mu
-after-brace/0: assume-keyboard ...
-after-brace/0: assume-keyboard ...
-after-brace/0: run ...
-after-brace/0: memory-should-contain ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: read-key-in-mu
-run/0: instruction read-key-in-mu/0
-run/0: {name: "keyboard", value: 901, type: 2, properties: ["keyboard": "address"]} <- assume-keyboard/44 {name: "abc", value: 0, type: 0, properties: ["abc": "literal-string"]}
-mem/0: storing 1000 in location 901
-run/0: instruction read-key-in-mu/1
-run/0: {name: "keyboard", value: 901, type: 2, properties: ["keyboard": "address"]} <- assume-keyboard/125 {name: "keyboard", value: 901, type: 2, properties: ["keyboard": "address"]}
-mem/0: location 901 is 1000
-run/0: instruction init-fake-keyboard/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1004
-run/0: instruction init-fake-keyboard/1
-run/0: {name: "result", value: 1, type: 2-12, properties: ["result": "address":"keyboard"]} <- new/44 {name: "keyboard", value: 12, type: 0, properties: ["keyboard": "type"]}
-mem/0: new alloc: 1035
-mem/0: storing 1035 in location 1006
-run/0: instruction init-fake-keyboard/2
-run/0: {name: "buf", value: 2, type: 2-2-5-4, properties: ["buf": "address":"address":"array":"character"]} <- get-address/25 {name: "result", value: 1, type: 2-12, properties: ["result": "address":"keyboard", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is result
-mem/0: location 1006 is 1035
-run/0: ingredient 1 is data
-run/0: address to copy is 1036
-run/0: product 0 is 1036
-mem/0: storing 1036 in location 1007
-run/0: instruction init-fake-keyboard/3
-run/0: {name: "buf", value: 2, type: 2-2-5-4, properties: ["buf": "address":"address":"array":"character", "deref": ]} <- next-ingredient/30 
-run/0: product 0 is 1000
-mem/0: location 1007 is 1036
-mem/0: storing 1000 in location 1036
-run/0: instruction init-fake-keyboard/4
-run/0: {name: "idx", value: 3, type: 2-1, properties: ["idx": "address":"integer"]} <- get-address/25 {name: "result", value: 1, type: 2-12, properties: ["result": "address":"keyboard", "deref": ]}, {name: "index", value: 0, type: 0, properties: ["index": "offset"]}
-run/0: ingredient 0 is result
-mem/0: location 1006 is 1035
-run/0: ingredient 1 is index
-run/0: address to copy is 1035
-run/0: product 0 is 1035
-mem/0: storing 1035 in location 1008
-run/0: instruction init-fake-keyboard/5
-run/0: {name: "idx", value: 3, type: 2-1, properties: ["idx": "address":"integer", "deref": ]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
-mem/0: location 1008 is 1035
-mem/0: storing 0 in location 1035
-run/0: instruction init-fake-keyboard/6
-run/0: reply/33 {name: "result", value: 1, type: 2-12, properties: ["result": "address":"keyboard"]}
-mem/0: location 1006 is 1035
-run/0: result 0 is 1035
-mem/0: storing 1035 in location 901
-run/0: instruction read-key-in-mu/2
-run/0: run/45 {name: "
-    1:character, 2:boolean, keyboard:address <- read-key keyboard:address
-    3:character, 4:boolean, keyboard:address <- read-key keyboard:address
-    5:character, 6:boolean, keyboard:address <- read-key keyboard:address
-    7:character, 8:boolean, keyboard:address <- read-key keyboard:address
-  ", value: 0, type: 0, properties: ["
-    1:character, 2:boolean, keyboard:address <- read-key keyboard:address
-    3:character, 4:boolean, keyboard:address <- read-key keyboard:address
-    5:character, 6:boolean, keyboard:address <- read-key keyboard:address
-    7:character, 8:boolean, keyboard:address <- read-key keyboard:address
-  ": "literal-string"]}
-parse/0: instruction: read-key
-parse/0:   ingredient: {name: "keyboard", value: 0, type: 2, properties: ["keyboard": "address"]}
-parse/0:   product: {name: "1", value: 0, type: 4, properties: ["1": "character"]}
-parse/0:   product: {name: "2", value: 0, type: 3, properties: ["2": "boolean"]}
-parse/0:   product: {name: "keyboard", value: 0, type: 2, properties: ["keyboard": "address"]}
-parse/0: instruction: read-key
-parse/0:   ingredient: {name: "keyboard", value: 0, type: 2, properties: ["keyboard": "address"]}
-parse/0:   product: {name: "3", value: 0, type: 4, properties: ["3": "character"]}
-parse/0:   product: {name: "4", value: 0, type: 3, properties: ["4": "boolean"]}
-parse/0:   product: {name: "keyboard", value: 0, type: 2, properties: ["keyboard": "address"]}
-parse/0: instruction: read-key
-parse/0:   ingredient: {name: "keyboard", value: 0, type: 2, properties: ["keyboard": "address"]}
-parse/0:   product: {name: "5", value: 0, type: 4, properties: ["5": "character"]}
-parse/0:   product: {name: "6", value: 0, type: 3, properties: ["6": "boolean"]}
-parse/0:   product: {name: "keyboard", value: 0, type: 2, properties: ["keyboard": "address"]}
-parse/0: instruction: read-key
-parse/0:   ingredient: {name: "keyboard", value: 0, type: 2, properties: ["keyboard": "address"]}
-parse/0:   product: {name: "7", value: 0, type: 4, properties: ["7": "character"]}
-parse/0:   product: {name: "8", value: 0, type: 3, properties: ["8": "boolean"]}
-parse/0:   product: {name: "keyboard", value: 0, type: 2, properties: ["keyboard": "address"]}
-after-brace/0: recipe run1001
-after-brace/0: read-key ...
-after-brace/0: read-key ...
-after-brace/0: read-key ...
-after-brace/0: read-key ...
-run/0: instruction run1001/0
-run/0: {name: "1", value: 1, type: 4, properties: ["1": "character"]}, {name: "2", value: 2, type: 3, properties: ["2": "boolean"]}, {name: "keyboard", value: 901, type: 2, properties: ["keyboard": "address"]} <- read-key/126 {name: "keyboard", value: 901, type: 2, properties: ["keyboard": "address"]}
-mem/0: location 901 is 1035
-run/0: instruction read-key/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1037
-run/0: instruction read-key/1
-run/0: {name: "x", value: 1, type: 2-12, properties: ["x": "address":"keyboard"]} <- next-ingredient/30 
-run/0: product 0 is 1035
-mem/0: storing 1035 in location 1039
-run/0: instruction read-key/3
-run/0: break-unless/12 {name: "x", value: 1, type: 2-12, properties: ["x": "address":"keyboard"]}, {name: "", value: 11, type: , properties: ["": ]}
-mem/0: location 1039 is 1035
-run/0: ingredient 0 is 1035
-run/0: jump-unless fell through
-run/0: instruction read-key/4
-run/0: {name: "idx", value: 2, type: 2-1, properties: ["idx": "address":"integer"]} <- get-address/25 {name: "x", value: 1, type: 2-12, properties: ["x": "address":"keyboard", "deref": ]}, {name: "index", value: 0, type: 0, properties: ["index": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1039 is 1035
-run/0: ingredient 1 is index
-run/0: address to copy is 1035
-run/0: product 0 is 1035
-mem/0: storing 1035 in location 1040
-run/0: instruction read-key/5
-run/0: {name: "buf", value: 3, type: 2-5-4, properties: ["buf": "address":"array":"character"]} <- get/24 {name: "x", value: 1, type: 2-12, properties: ["x": "address":"keyboard", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1039 is 1035
-run/0: ingredient 1 is data
-run/0: address to copy is 1036
-run/0: its type is 2
-mem/0: location 1036 is 1000
-run/0: product 0 is 1000
-mem/0: storing 1000 in location 1041
-run/0: instruction read-key/6
-run/0: {name: "max", value: 4, type: 1, properties: ["max": "integer"]} <- length/28 {name: "buf", value: 3, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}
-mem/0: location 1041 is 1000
-mem/0: storing 3 in location 1042
-run/0: instruction read-key/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "idx", value: 2, type: 2-1, properties: ["idx": "address":"integer", "deref": ]}, {name: "max", value: 4, type: 1, properties: ["max": "integer"]}
-run/0: ingredient 0 is idx
-mem/0: location 1040 is 1035
-mem/0: location 1035 is 0
-run/0: ingredient 1 is max
-mem/0: location 1042 is 3
-run/0: product 0 is 0
-mem/0: storing 0 in location 1043
-run/0: instruction read-key/9
-run/0: break-unless/12 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
-mem/0: location 1043 is 0
-run/0: ingredient 0 is 0
-run/0: ingredient 1 is 
-run/0: jumping to instruction 11
-run/0: instruction read-key/12
-run/0: {name: "c", value: 6, type: 4, properties: ["c": "character"]} <- index/26 {name: "buf", value: 3, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "idx", value: 2, type: 2-1, properties: ["idx": "address":"integer", "deref": ]}
-run/0: ingredient 0 is {name: "buf", value: 3, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}
-mem/0: location 1041 is 1000
-run/0: ingredient 1 is {name: "idx", value: 2, type: 2-1, properties: ["idx": "address":"integer", "deref": ]}
-mem/0: location 1040 is 1035
-mem/0: location 1035 is 0
-run/0: address to copy is 1001
-run/0: its type is 4
-mem/0: location 1001 is 97
-run/0: product 0 is 97
-mem/0: storing 97 in location 1044
-run/0: instruction read-key/13
-run/0: {name: "idx", value: 2, type: 2-1, properties: ["idx": "address":"integer", "deref": ]} <- add/2 {name: "idx", value: 2, type: 2-1, properties: ["idx": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is idx
-mem/0: location 1040 is 1035
-mem/0: location 1035 is 0
-run/0: ingredient 1 is 1
-run/0: product 0 is 1
-mem/0: location 1040 is 1035
-mem/0: storing 1 in location 1035
-run/0: instruction read-key/14
-run/0: reply/33 {name: "c", value: 6, type: 4, properties: ["c": "character"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal", "found": ]}, {name: "x", value: 1, type: 2-12, properties: ["x": "address":"keyboard", "same-as-ingredient": "0"]}
-mem/0: location 1044 is 97
-mem/0: location 1039 is 1035
-run/0: result 0 is 97
-mem/0: storing 97 in location 1
-run/0: result 1 is 1
-mem/0: storing 1 in location 2
-run/0: result 2 is 1035
-mem/0: storing 1035 in location 901
-run/0: instruction run1001/1
-run/0: {name: "3", value: 3, type: 4, properties: ["3": "character"]}, {name: "4", value: 4, type: 3, properties: ["4": "boolean"]}, {name: "keyboard", value: 901, type: 2, properties: ["keyboard": "address"]} <- read-key/126 {name: "keyboard", value: 901, type: 2, properties: ["keyboard": "address"]}
-mem/0: location 901 is 1035
-run/0: instruction read-key/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1068
-run/0: instruction read-key/1
-run/0: {name: "x", value: 1, type: 2-12, properties: ["x": "address":"keyboard"]} <- next-ingredient/30 
-run/0: product 0 is 1035
-mem/0: storing 1035 in location 1070
-run/0: instruction read-key/3
-run/0: break-unless/12 {name: "x", value: 1, type: 2-12, properties: ["x": "address":"keyboard"]}, {name: "", value: 11, type: , properties: ["": ]}
-mem/0: location 1070 is 1035
-run/0: ingredient 0 is 1035
-run/0: jump-unless fell through
-run/0: instruction read-key/4
-run/0: {name: "idx", value: 2, type: 2-1, properties: ["idx": "address":"integer"]} <- get-address/25 {name: "x", value: 1, type: 2-12, properties: ["x": "address":"keyboard", "deref": ]}, {name: "index", value: 0, type: 0, properties: ["index": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1070 is 1035
-run/0: ingredient 1 is index
-run/0: address to copy is 1035
-run/0: product 0 is 1035
-mem/0: storing 1035 in location 1071
-run/0: instruction read-key/5
-run/0: {name: "buf", value: 3, type: 2-5-4, properties: ["buf": "address":"array":"character"]} <- get/24 {name: "x", value: 1, type: 2-12, properties: ["x": "address":"keyboard", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1070 is 1035
-run/0: ingredient 1 is data
-run/0: address to copy is 1036
-run/0: its type is 2
-mem/0: location 1036 is 1000
-run/0: product 0 is 1000
-mem/0: storing 1000 in location 1072
-run/0: instruction read-key/6
-run/0: {name: "max", value: 4, type: 1, properties: ["max": "integer"]} <- length/28 {name: "buf", value: 3, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}
-mem/0: location 1072 is 1000
-mem/0: storing 3 in location 1073
-run/0: instruction read-key/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "idx", value: 2, type: 2-1, properties: ["idx": "address":"integer", "deref": ]}, {name: "max", value: 4, type: 1, properties: ["max": "integer"]}
-run/0: ingredient 0 is idx
-mem/0: location 1071 is 1035
-mem/0: location 1035 is 1
-run/0: ingredient 1 is max
-mem/0: location 1073 is 3
-run/0: product 0 is 0
-mem/0: storing 0 in location 1074
-run/0: instruction read-key/9
-run/0: break-unless/12 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
-mem/0: location 1074 is 0
-run/0: ingredient 0 is 0
-run/0: ingredient 1 is 
-run/0: jumping to instruction 11
-run/0: instruction read-key/12
-run/0: {name: "c", value: 6, type: 4, properties: ["c": "character"]} <- index/26 {name: "buf", value: 3, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "idx", value: 2, type: 2-1, properties: ["idx": "address":"integer", "deref": ]}
-run/0: ingredient 0 is {name: "buf", value: 3, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}
-mem/0: location 1072 is 1000
-run/0: ingredient 1 is {name: "idx", value: 2, type: 2-1, properties: ["idx": "address":"integer", "deref": ]}
-mem/0: location 1071 is 1035
-mem/0: location 1035 is 1
-run/0: address to copy is 1002
-run/0: its type is 4
-mem/0: location 1002 is 98
-run/0: product 0 is 98
-mem/0: storing 98 in location 1075
-run/0: instruction read-key/13
-run/0: {name: "idx", value: 2, type: 2-1, properties: ["idx": "address":"integer", "deref": ]} <- add/2 {name: "idx", value: 2, type: 2-1, properties: ["idx": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is idx
-mem/0: location 1071 is 1035
-mem/0: location 1035 is 1
-run/0: ingredient 1 is 1
-run/0: product 0 is 2
-mem/0: location 1071 is 1035
-mem/0: storing 2 in location 1035
-run/0: instruction read-key/14
-run/0: reply/33 {name: "c", value: 6, type: 4, properties: ["c": "character"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal", "found": ]}, {name: "x", value: 1, type: 2-12, properties: ["x": "address":"keyboard", "same-as-ingredient": "0"]}
-mem/0: location 1075 is 98
-mem/0: location 1070 is 1035
-run/0: result 0 is 98
-mem/0: storing 98 in location 3
-run/0: result 1 is 1
-mem/0: storing 1 in location 4
-run/0: result 2 is 1035
-mem/0: storing 1035 in location 901
-run/0: instruction run1001/2
-run/0: {name: "5", value: 5, type: 4, properties: ["5": "character"]}, {name: "6", value: 6, type: 3, properties: ["6": "boolean"]}, {name: "keyboard", value: 901, type: 2, properties: ["keyboard": "address"]} <- read-key/126 {name: "keyboard", value: 901, type: 2, properties: ["keyboard": "address"]}
-mem/0: location 901 is 1035
-run/0: instruction read-key/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1099
-run/0: instruction read-key/1
-run/0: {name: "x", value: 1, type: 2-12, properties: ["x": "address":"keyboard"]} <- next-ingredient/30 
-run/0: product 0 is 1035
-mem/0: storing 1035 in location 1101
-run/0: instruction read-key/3
-run/0: break-unless/12 {name: "x", value: 1, type: 2-12, properties: ["x": "address":"keyboard"]}, {name: "", value: 11, type: , properties: ["": ]}
-mem/0: location 1101 is 1035
-run/0: ingredient 0 is 1035
-run/0: jump-unless fell through
-run/0: instruction read-key/4
-run/0: {name: "idx", value: 2, type: 2-1, properties: ["idx": "address":"integer"]} <- get-address/25 {name: "x", value: 1, type: 2-12, properties: ["x": "address":"keyboard", "deref": ]}, {name: "index", value: 0, type: 0, properties: ["index": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1101 is 1035
-run/0: ingredient 1 is index
-run/0: address to copy is 1035
-run/0: product 0 is 1035
-mem/0: storing 1035 in location 1102
-run/0: instruction read-key/5
-run/0: {name: "buf", value: 3, type: 2-5-4, properties: ["buf": "address":"array":"character"]} <- get/24 {name: "x", value: 1, type: 2-12, properties: ["x": "address":"keyboard", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1101 is 1035
-run/0: ingredient 1 is data
-run/0: address to copy is 1036
-run/0: its type is 2
-mem/0: location 1036 is 1000
-run/0: product 0 is 1000
-mem/0: storing 1000 in location 1103
-run/0: instruction read-key/6
-run/0: {name: "max", value: 4, type: 1, properties: ["max": "integer"]} <- length/28 {name: "buf", value: 3, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}
-mem/0: location 1103 is 1000
-mem/0: storing 3 in location 1104
-run/0: instruction read-key/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "idx", value: 2, type: 2-1, properties: ["idx": "address":"integer", "deref": ]}, {name: "max", value: 4, type: 1, properties: ["max": "integer"]}
-run/0: ingredient 0 is idx
-mem/0: location 1102 is 1035
-mem/0: location 1035 is 2
-run/0: ingredient 1 is max
-mem/0: location 1104 is 3
-run/0: product 0 is 0
-mem/0: storing 0 in location 1105
-run/0: instruction read-key/9
-run/0: break-unless/12 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
-mem/0: location 1105 is 0
-run/0: ingredient 0 is 0
-run/0: ingredient 1 is 
-run/0: jumping to instruction 11
-run/0: instruction read-key/12
-run/0: {name: "c", value: 6, type: 4, properties: ["c": "character"]} <- index/26 {name: "buf", value: 3, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "idx", value: 2, type: 2-1, properties: ["idx": "address":"integer", "deref": ]}
-run/0: ingredient 0 is {name: "buf", value: 3, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}
-mem/0: location 1103 is 1000
-run/0: ingredient 1 is {name: "idx", value: 2, type: 2-1, properties: ["idx": "address":"integer", "deref": ]}
-mem/0: location 1102 is 1035
-mem/0: location 1035 is 2
-run/0: address to copy is 1003
-run/0: its type is 4
-mem/0: location 1003 is 99
-run/0: product 0 is 99
-mem/0: storing 99 in location 1106
-run/0: instruction read-key/13
-run/0: {name: "idx", value: 2, type: 2-1, properties: ["idx": "address":"integer", "deref": ]} <- add/2 {name: "idx", value: 2, type: 2-1, properties: ["idx": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is idx
-mem/0: location 1102 is 1035
-mem/0: location 1035 is 2
-run/0: ingredient 1 is 1
-run/0: product 0 is 3
-mem/0: location 1102 is 1035
-mem/0: storing 3 in location 1035
-run/0: instruction read-key/14
-run/0: reply/33 {name: "c", value: 6, type: 4, properties: ["c": "character"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal", "found": ]}, {name: "x", value: 1, type: 2-12, properties: ["x": "address":"keyboard", "same-as-ingredient": "0"]}
-mem/0: location 1106 is 99
-mem/0: location 1101 is 1035
-run/0: result 0 is 99
-mem/0: storing 99 in location 5
-run/0: result 1 is 1
-mem/0: storing 1 in location 6
-run/0: result 2 is 1035
-mem/0: storing 1035 in location 901
-run/0: instruction run1001/3
-run/0: {name: "7", value: 7, type: 4, properties: ["7": "character"]}, {name: "8", value: 8, type: 3, properties: ["8": "boolean"]}, {name: "keyboard", value: 901, type: 2, properties: ["keyboard": "address"]} <- read-key/126 {name: "keyboard", value: 901, type: 2, properties: ["keyboard": "address"]}
-mem/0: location 901 is 1035
-run/0: instruction read-key/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1130
-run/0: instruction read-key/1
-run/0: {name: "x", value: 1, type: 2-12, properties: ["x": "address":"keyboard"]} <- next-ingredient/30 
-run/0: product 0 is 1035
-mem/0: storing 1035 in location 1132
-run/0: instruction read-key/3
-run/0: break-unless/12 {name: "x", value: 1, type: 2-12, properties: ["x": "address":"keyboard"]}, {name: "", value: 11, type: , properties: ["": ]}
-mem/0: location 1132 is 1035
-run/0: ingredient 0 is 1035
-run/0: jump-unless fell through
-run/0: instruction read-key/4
-run/0: {name: "idx", value: 2, type: 2-1, properties: ["idx": "address":"integer"]} <- get-address/25 {name: "x", value: 1, type: 2-12, properties: ["x": "address":"keyboard", "deref": ]}, {name: "index", value: 0, type: 0, properties: ["index": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1132 is 1035
-run/0: ingredient 1 is index
-run/0: address to copy is 1035
-run/0: product 0 is 1035
-mem/0: storing 1035 in location 1133
-run/0: instruction read-key/5
-run/0: {name: "buf", value: 3, type: 2-5-4, properties: ["buf": "address":"array":"character"]} <- get/24 {name: "x", value: 1, type: 2-12, properties: ["x": "address":"keyboard", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1132 is 1035
-run/0: ingredient 1 is data
-run/0: address to copy is 1036
-run/0: its type is 2
-mem/0: location 1036 is 1000
-run/0: product 0 is 1000
-mem/0: storing 1000 in location 1134
-run/0: instruction read-key/6
-run/0: {name: "max", value: 4, type: 1, properties: ["max": "integer"]} <- length/28 {name: "buf", value: 3, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}
-mem/0: location 1134 is 1000
-mem/0: storing 3 in location 1135
-run/0: instruction read-key/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "idx", value: 2, type: 2-1, properties: ["idx": "address":"integer", "deref": ]}, {name: "max", value: 4, type: 1, properties: ["max": "integer"]}
-run/0: ingredient 0 is idx
-mem/0: location 1133 is 1035
-mem/0: location 1035 is 3
-run/0: ingredient 1 is max
-mem/0: location 1135 is 3
-run/0: product 0 is 1
-mem/0: storing 1 in location 1136
-run/0: instruction read-key/9
-run/0: break-unless/12 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
-mem/0: location 1136 is 1
-run/0: ingredient 0 is 1
-run/0: jump-unless fell through
-run/0: instruction read-key/10
-run/0: reply/33 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}, {name: "0", value: 0, type: 0, properties: ["0": "literal", "done": ]}, {name: "x", value: 1, type: 2-12, properties: ["x": "address":"keyboard", "same-as-ingredient": "0"]}
-mem/0: location 1132 is 1035
-run/0: result 0 is 0
-mem/0: storing 0 in location 7
-run/0: result 1 is 0
-mem/0: storing 0 in location 8
-run/0: result 2 is 1035
-mem/0: storing 1035 in location 901
-run/0: instruction read-key-in-mu/3
-run/0: memory-should-contain/46 {name: "
-    1 <- 97  # 'a'
-    2 <- 1  # first read-key call found a character
-    3 <- 98  # 'b'
-    4 <- 1  # second read-key call found a character
-    5 <- 99  # 'c'
-    6 <- 1  # third read-key call found a character
-    7 <- 0
-    8 <- 0  # fourth read-key call didn't find a character
-  ", value: 0, type: 0, properties: ["
-    1 <- 97  # 'a'
-    2 <- 1  # first read-key call found a character
-    3 <- 98  # 'b'
-    4 <- 1  # second read-key call found a character
-    5 <- 99  # 'c'
-    6 <- 1  # third read-key call found a character
-    7 <- 0
-    8 <- 0  # fourth read-key call didn't find a character
-  ": "literal-string"]}
-run/0: checking location 1
-run/0: checking location 2
-run/0: checking location 3
-run/0: checking location 4
-run/0: checking location 5
-run/0: checking location 6
-run/0: checking location 7
-run/0: checking location 8
diff --git a/cpp/.traces/reply b/cpp/.traces/reply
deleted file mode 100644
index 6ac4c162..00000000
--- a/cpp/.traces/reply
+++ /dev/null
@@ -1,42 +0,0 @@
-parse/0: instruction: f
-parse/0:   ingredient: {name: "2", value: 0, type: 0, properties: ["2": "literal"]}
-parse/0:   product: {name: "3", value: 0, type: 1, properties: ["3": "integer"]}
-parse/0:   product: {name: "4", value: 0, type: 1, properties: ["4": "integer"]}
-parse/0: instruction: next-ingredient
-parse/0:   product: {name: "12", value: 0, type: 1, properties: ["12": "integer"]}
-parse/0: instruction: add
-parse/0:   ingredient: {name: "1", value: 0, type: 0, properties: ["1": "literal"]}
-parse/0:   ingredient: {name: "12", value: 0, type: 1, properties: ["12": "integer"]}
-parse/0:   product: {name: "13", value: 0, type: 1, properties: ["13": "integer"]}
-parse/0: instruction: reply
-parse/0:   ingredient: {name: "12", value: 0, type: 1, properties: ["12": "integer"]}
-parse/0:   ingredient: {name: "13", value: 0, type: 1, properties: ["13": "integer"]}
-after-brace/0: recipe main
-after-brace/0: f ...
-after-brace/0: recipe f
-after-brace/0: next-ingredient ...
-after-brace/0: add ...
-after-brace/0: reply ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]}, {name: "4", value: 4, type: 1, properties: ["4": "integer"]} <- f/1001 {name: "2", value: 2, type: 0, properties: ["2": "literal"]}
-run/0: instruction f/0
-run/0: {name: "12", value: 12, type: 1, properties: ["12": "integer"]} <- next-ingredient/30 
-run/0: product 0 is 2
-mem/0: storing 2 in location 12
-run/0: instruction f/1
-run/0: {name: "13", value: 13, type: 1, properties: ["13": "integer"]} <- add/2 {name: "1", value: 1, type: 0, properties: ["1": "literal"]}, {name: "12", value: 12, type: 1, properties: ["12": "integer"]}
-run/0: ingredient 0 is 1
-run/0: ingredient 1 is 12
-mem/0: location 12 is 2
-run/0: product 0 is 3
-mem/0: storing 3 in location 13
-run/0: instruction f/2
-run/0: reply/33 {name: "12", value: 12, type: 1, properties: ["12": "integer"]}, {name: "13", value: 13, type: 1, properties: ["13": "integer"]}
-mem/0: location 12 is 2
-mem/0: location 13 is 3
-run/0: result 0 is 2
-mem/0: storing 2 in location 3
-run/0: result 1 is 3
-mem/0: storing 3 in location 4
diff --git a/cpp/.traces/reply_container b/cpp/.traces/reply_container
deleted file mode 100644
index 693f984d..00000000
--- a/cpp/.traces/reply_container
+++ /dev/null
@@ -1,35 +0,0 @@
-parse/0: instruction: f
-parse/0:   ingredient: {name: "2", value: 0, type: 0, properties: ["2": "literal"]}
-parse/0:   product: {name: "3", value: 0, type: 6, properties: ["3": "point"]}
-parse/0: instruction: next-ingredient
-parse/0:   product: {name: "12", value: 0, type: 1, properties: ["12": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "35", value: 0, type: 0, properties: ["35": "literal"]}
-parse/0:   product: {name: "13", value: 0, type: 1, properties: ["13": "integer"]}
-parse/0: instruction: reply
-parse/0:   ingredient: {name: "12", value: 0, type: 6, properties: ["12": "point"]}
-after-brace/0: recipe main
-after-brace/0: f ...
-after-brace/0: recipe f
-after-brace/0: next-ingredient ...
-after-brace/0: copy ...
-after-brace/0: reply ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: {name: "3", value: 3, type: 6, properties: ["3": "point"]} <- f/1001 {name: "2", value: 2, type: 0, properties: ["2": "literal"]}
-run/0: instruction f/0
-run/0: {name: "12", value: 12, type: 1, properties: ["12": "integer"]} <- next-ingredient/30 
-run/0: product 0 is 2
-mem/0: storing 2 in location 12
-run/0: instruction f/1
-run/0: {name: "13", value: 13, type: 1, properties: ["13": "integer"]} <- copy/1 {name: "35", value: 35, type: 0, properties: ["35": "literal"]}
-run/0: ingredient 0 is 35
-mem/0: storing 35 in location 13
-run/0: instruction f/2
-run/0: reply/33 {name: "12", value: 12, type: 6, properties: ["12": "point"]}
-mem/0: location 12 is 2
-mem/0: location 13 is 35
-run/0: result 0 is [2, 35]
-mem/0: storing 2 in location 3
-mem/0: storing 35 in location 4
diff --git a/cpp/.traces/reply_same_as_ingredient b/cpp/.traces/reply_same_as_ingredient
deleted file mode 100644
index 0ac3ce16..00000000
--- a/cpp/.traces/reply_same_as_ingredient
+++ /dev/null
@@ -1,36 +0,0 @@
-parse/0: instruction: new
-parse/0:   ingredient: {name: "integer", value: 0, type: 0, properties: ["integer": "type"]}
-parse/0:   product: {name: "1", value: 0, type: 2-1, properties: ["1": "address":"integer"]}
-parse/0: instruction: test1
-parse/0:   ingredient: {name: "1", value: 0, type: 2-1, properties: ["1": "address":"integer"]}
-parse/0:   product: {name: "2", value: 0, type: 2-1, properties: ["2": "address":"integer"]}
-parse/0: instruction: next-ingredient
-parse/0:   product: {name: "10", value: 0, type: 2-1, properties: ["10": "address":"integer"]}
-parse/0: instruction: reply
-parse/0:   ingredient: {name: "10", value: 0, type: 2-1, properties: ["10": "address":"integer", "same-as-ingredient": "0"]}
-new/0: integer -> 1
-after-brace/0: recipe main
-after-brace/0: new ...
-after-brace/0: test1 ...
-after-brace/0: recipe test1
-after-brace/0: next-ingredient ...
-after-brace/0: reply ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 2-1, properties: ["1": "address":"integer"]} <- new/44 {name: "integer", value: 1, type: 0, properties: ["integer": "type"]}
-mem/0: new alloc: 1000
-mem/0: storing 1000 in location 1
-run/0: instruction main/1
-run/0: {name: "2", value: 2, type: 2-1, properties: ["2": "address":"integer"]} <- test1/1001 {name: "1", value: 1, type: 2-1, properties: ["1": "address":"integer"]}
-mem/0: location 1 is 1000
-run/0: instruction test1/0
-run/0: {name: "10", value: 10, type: 2-1, properties: ["10": "address":"integer"]} <- next-ingredient/30 
-run/0: product 0 is 1000
-mem/0: storing 1000 in location 10
-run/0: instruction test1/1
-run/0: reply/33 {name: "10", value: 10, type: 2-1, properties: ["10": "address":"integer", "same-as-ingredient": "0"]}
-mem/0: location 10 is 1000
-run/0: result 0 is 1000
-warn/0: 'same-as-ingredient' result 2 must be location 1
-mem/0: storing 1000 in location 2
diff --git a/cpp/.traces/return_on_fallthrough b/cpp/.traces/return_on_fallthrough
deleted file mode 100644
index 01d38444..00000000
--- a/cpp/.traces/return_on_fallthrough
+++ /dev/null
@@ -1,48 +0,0 @@
-parse/0: instruction: f
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "34", value: 0, type: 0, properties: ["34": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "34", value: 0, type: 0, properties: ["34": "literal"]}
-parse/0:   product: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "34", value: 0, type: 0, properties: ["34": "literal"]}
-parse/0:   product: {name: "3", value: 0, type: 1, properties: ["3": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "34", value: 0, type: 0, properties: ["34": "literal"]}
-parse/0:   product: {name: "4", value: 0, type: 1, properties: ["4": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "34", value: 0, type: 0, properties: ["34": "literal"]}
-parse/0:   product: {name: "5", value: 0, type: 1, properties: ["5": "integer"]}
-after-brace/0: recipe main
-after-brace/0: f ...
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: recipe f
-after-brace/0: copy ...
-after-brace/0: copy ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: f/1001 
-run/0: instruction f/0
-run/0: {name: "4", value: 4, type: 1, properties: ["4": "integer"]} <- copy/1 {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
-run/0: ingredient 0 is 34
-mem/0: storing 34 in location 4
-run/0: instruction f/1
-run/0: {name: "5", value: 5, type: 1, properties: ["5": "integer"]} <- copy/1 {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
-run/0: ingredient 0 is 34
-mem/0: storing 34 in location 5
-run/0: instruction main/1
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
-run/0: ingredient 0 is 34
-mem/0: storing 34 in location 1
-run/0: instruction main/2
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
-run/0: ingredient 0 is 34
-mem/0: storing 34 in location 2
-run/0: instruction main/3
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- copy/1 {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
-run/0: ingredient 0 is 34
-mem/0: storing 34 in location 3
diff --git a/cpp/.traces/rewind_ingredients b/cpp/.traces/rewind_ingredients
deleted file mode 100644
index 4c7b4159..00000000
--- a/cpp/.traces/rewind_ingredients
+++ /dev/null
@@ -1,36 +0,0 @@
-parse/0: instruction: f
-parse/0:   ingredient: {name: "2", value: 0, type: 0, properties: ["2": "literal"]}
-parse/0: instruction: next-ingredient
-parse/0:   product: {name: "12", value: 0, type: 1, properties: ["12": "integer"]}
-parse/0: instruction: next-ingredient
-parse/0:   product: {name: "_", value: 0, type: 0, properties: ["_": "dummy"]}
-parse/0:   product: {name: "1", value: 0, type: 3, properties: ["1": "boolean"]}
-parse/0: instruction: rewind-ingredients
-parse/0: instruction: next-ingredient
-parse/0:   product: {name: "13", value: 0, type: 1, properties: ["13": "integer"]}
-parse/0:   product: {name: "2", value: 0, type: 3, properties: ["2": "boolean"]}
-after-brace/0: recipe main
-after-brace/0: f ...
-after-brace/0: recipe f
-after-brace/0: next-ingredient ...
-after-brace/0: next-ingredient ...
-after-brace/0: rewind-ingredients ...
-after-brace/0: next-ingredient ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: f/1001 {name: "2", value: 2, type: 0, properties: ["2": "literal"]}
-run/0: instruction f/0
-run/0: {name: "12", value: 12, type: 1, properties: ["12": "integer"]} <- next-ingredient/30 
-run/0: product 0 is 2
-mem/0: storing 2 in location 12
-run/0: instruction f/1
-run/0: {name: "_", value: 0, type: 0, properties: ["_": "dummy"]}, {name: "1", value: 1, type: 3, properties: ["1": "boolean"]} <- next-ingredient/30 
-mem/0: storing 0 in location 1
-run/0: instruction f/2
-run/0: rewind-ingredients/31 
-run/0: instruction f/3
-run/0: {name: "13", value: 13, type: 1, properties: ["13": "integer"]}, {name: "2", value: 2, type: 3, properties: ["2": "boolean"]} <- next-ingredient/30 
-run/0: product 0 is 2
-mem/0: storing 2 in location 13
-mem/0: storing 1 in location 2
diff --git a/cpp/.traces/routine_state_test b/cpp/.traces/routine_state_test
deleted file mode 100644
index 9616c23c..00000000
--- a/cpp/.traces/routine_state_test
+++ /dev/null
@@ -1,39 +0,0 @@
-parse/0: instruction: start-running
-parse/0:   ingredient: {name: "f2", value: 0, type: 0, properties: ["f2": "recipe"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer", "child-id": ]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-parse/0:   product: {name: "12", value: 0, type: 1, properties: ["12": "integer"]}
-parse/0: instruction: routine-state
-parse/0:   ingredient: {name: "1", value: 0, type: 1, properties: ["1": "integer", "child-id": ]}
-parse/0:   product: {name: "2", value: 0, type: 1, properties: ["2": "integer", "state": ]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-parse/0:   product: {name: "12", value: 0, type: 1, properties: ["12": "integer"]}
-after-brace/0: recipe f1
-after-brace/0: start-running ...
-after-brace/0: copy ...
-after-brace/0: routine-state ...
-after-brace/0: recipe f2
-after-brace/0: copy ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: f1
-run/0: instruction f1/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer", "child-id": ]} <- start-running/34 {name: "f2", value: 0, type: 0, properties: ["f2": "recipe"]}
-run/0: ingredient 0 is f2
-new/0: routine allocated memory from 101000 to 201000
-mem/0: storing 2 in location 1
-run/0: instruction f1/1
-run/0: {name: "12", value: 12, type: 1, properties: ["12": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
-mem/0: storing 0 in location 12
-schedule/0: f2
-run/0: instruction f2/0
-run/0: {name: "12", value: 12, type: 1, properties: ["12": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
-mem/0: storing 0 in location 12
-schedule/0: f1
-run/0: instruction f1/2
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer", "state": ]} <- routine-state/35 {name: "1", value: 1, type: 1, properties: ["1": "integer", "child-id": ]}
-mem/0: location 1 is 2
-mem/0: storing 1 in location 2
diff --git a/cpp/.traces/run b/cpp/.traces/run
deleted file mode 100644
index 1cda2c08..00000000
--- a/cpp/.traces/run
+++ /dev/null
@@ -1,25 +0,0 @@
-parse/0: instruction: run
-parse/0:   ingredient: {name: "
-    1:integer <- copy 13:literal
-  ", value: 0, type: 0, properties: ["
-    1:integer <- copy 13:literal
-  ": "literal-string"]}
-after-brace/0: recipe main
-after-brace/0: run ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: run/45 {name: "
-    1:integer <- copy 13:literal
-  ", value: 0, type: 0, properties: ["
-    1:integer <- copy 13:literal
-  ": "literal-string"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "13", value: 0, type: 0, properties: ["13": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-after-brace/0: recipe run1001
-after-brace/0: copy ...
-run/0: instruction run1001/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "13", value: 13, type: 0, properties: ["13": "literal"]}
-run/0: ingredient 0 is 13
-mem/0: storing 13 in location 1
diff --git a/cpp/.traces/run_dummy b/cpp/.traces/run_dummy
deleted file mode 100644
index 0cd9cdf3..00000000
--- a/cpp/.traces/run_dummy
+++ /dev/null
@@ -1,10 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-parse/0:   product: {name: "_", value: 0, type: 0, properties: ["_": "dummy"]}
-after-brace/0: recipe main
-after-brace/0: copy ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: {name: "_", value: 0, type: 0, properties: ["_": "dummy"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
diff --git a/cpp/.traces/run_label b/cpp/.traces/run_label
deleted file mode 100644
index f9f2fce7..00000000
--- a/cpp/.traces/run_label
+++ /dev/null
@@ -1,21 +0,0 @@
-parse/0: label: +foo
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "23", value: 0, type: 0, properties: ["23": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0:   product: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-after-brace/0: recipe main
-after-brace/0: copy ...
-after-brace/0: copy ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/1
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "23", value: 23, type: 0, properties: ["23": "literal"]}
-run/0: ingredient 0 is 23
-mem/0: storing 23 in location 1
-run/0: instruction main/2
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "1", value: 1, type: 1, properties: ["1": "integer"]}
-run/0: ingredient 0 is 1
-mem/0: location 1 is 23
-mem/0: storing 23 in location 2
diff --git a/cpp/.traces/run_multiple b/cpp/.traces/run_multiple
deleted file mode 100644
index fcb204d5..00000000
--- a/cpp/.traces/run_multiple
+++ /dev/null
@@ -1,47 +0,0 @@
-parse/0: instruction: run
-parse/0:   ingredient: {name: "
-    1:integer <- copy 13:literal
-  ", value: 0, type: 0, properties: ["
-    1:integer <- copy 13:literal
-  ": "literal-string"]}
-parse/0: instruction: run
-parse/0:   ingredient: {name: "
-    2:integer <- copy 13:literal
-  ", value: 0, type: 0, properties: ["
-    2:integer <- copy 13:literal
-  ": "literal-string"]}
-after-brace/0: recipe main
-after-brace/0: run ...
-after-brace/0: run ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: run/45 {name: "
-    1:integer <- copy 13:literal
-  ", value: 0, type: 0, properties: ["
-    1:integer <- copy 13:literal
-  ": "literal-string"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "13", value: 0, type: 0, properties: ["13": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-after-brace/0: recipe run1001
-after-brace/0: copy ...
-run/0: instruction run1001/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "13", value: 13, type: 0, properties: ["13": "literal"]}
-run/0: ingredient 0 is 13
-mem/0: storing 13 in location 1
-run/0: instruction main/1
-run/0: run/45 {name: "
-    2:integer <- copy 13:literal
-  ", value: 0, type: 0, properties: ["
-    2:integer <- copy 13:literal
-  ": "literal-string"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "13", value: 0, type: 0, properties: ["13": "literal"]}
-parse/0:   product: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-after-brace/0: recipe run1002
-after-brace/0: copy ...
-run/0: instruction run1002/0
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "13", value: 13, type: 0, properties: ["13": "literal"]}
-run/0: ingredient 0 is 13
-mem/0: storing 13 in location 2
diff --git a/cpp/.traces/scenario_block b/cpp/.traces/scenario_block
deleted file mode 100644
index cf2290ad..00000000
--- a/cpp/.traces/scenario_block
+++ /dev/null
@@ -1,39 +0,0 @@
-parse/0: instruction: run
-parse/0:   ingredient: {name: "
-    1:integer <- copy 13:literal
-  ", value: 0, type: 0, properties: ["
-    1:integer <- copy 13:literal
-  ": "literal-string"]}
-parse/0: instruction: memory-should-contain
-parse/0:   ingredient: {name: "
-    1 <- 13
-  ", value: 0, type: 0, properties: ["
-    1 <- 13
-  ": "literal-string"]}
-after-brace/0: recipe foo
-after-brace/0: run ...
-after-brace/0: memory-should-contain ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: foo
-run/0: instruction foo/0
-run/0: run/45 {name: "
-    1:integer <- copy 13:literal
-  ", value: 0, type: 0, properties: ["
-    1:integer <- copy 13:literal
-  ": "literal-string"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "13", value: 0, type: 0, properties: ["13": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-after-brace/0: recipe run1001
-after-brace/0: copy ...
-run/0: instruction run1001/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "13", value: 13, type: 0, properties: ["13": "literal"]}
-run/0: ingredient 0 is 13
-mem/0: storing 13 in location 1
-run/0: instruction foo/1
-run/0: memory-should-contain/46 {name: "
-    1 <- 13
-  ", value: 0, type: 0, properties: ["
-    1 <- 13
-  ": "literal-string"]}
-run/0: checking location 1
diff --git a/cpp/.traces/scenario_check_memory_and_trace b/cpp/.traces/scenario_check_memory_and_trace
deleted file mode 100644
index 1b1f6185..00000000
--- a/cpp/.traces/scenario_check_memory_and_trace
+++ /dev/null
@@ -1,76 +0,0 @@
-parse/0: instruction: run
-parse/0:   ingredient: {name: "
-    1:integer <- copy 13:literal
-    trace [a], [a b c]
-  ", value: 0, type: 0, properties: ["
-    1:integer <- copy 13:literal
-    trace [a], [a b c]
-  ": "literal-string"]}
-parse/0: instruction: memory-should-contain
-parse/0:   ingredient: {name: "
-    1 <- 13
-  ", value: 0, type: 0, properties: ["
-    1 <- 13
-  ": "literal-string"]}
-parse/0: instruction: trace-should-contain
-parse/0:   ingredient: {name: "
-    a: a b c
-  ", value: 0, type: 0, properties: ["
-    a: a b c
-  ": "literal-string"]}
-parse/0: instruction: trace-should-not-contain
-parse/0:   ingredient: {name: "
-    a: x y z
-  ", value: 0, type: 0, properties: ["
-    a: x y z
-  ": "literal-string"]}
-after-brace/0: recipe foo
-after-brace/0: run ...
-after-brace/0: memory-should-contain ...
-after-brace/0: trace-should-contain ...
-after-brace/0: trace-should-not-contain ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: foo
-run/0: instruction foo/0
-run/0: run/45 {name: "
-    1:integer <- copy 13:literal
-    trace [a], [a b c]
-  ", value: 0, type: 0, properties: ["
-    1:integer <- copy 13:literal
-    trace [a], [a b c]
-  ": "literal-string"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "13", value: 0, type: 0, properties: ["13": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0: instruction: trace
-parse/0:   ingredient: {name: "a", value: 0, type: 0, properties: ["a": "literal-string"]}
-parse/0:   ingredient: {name: "a b c", value: 0, type: 0, properties: ["a b c": "literal-string"]}
-after-brace/0: recipe run1001
-after-brace/0: copy ...
-after-brace/0: trace ...
-run/0: instruction run1001/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "13", value: 13, type: 0, properties: ["13": "literal"]}
-run/0: ingredient 0 is 13
-mem/0: storing 13 in location 1
-run/0: instruction run1001/1
-run/0: trace/18 {name: "a", value: 0, type: 0, properties: ["a": "literal-string"]}, {name: "a b c", value: 0, type: 0, properties: ["a b c": "literal-string"]}
-a/0: a b c
-run/0: instruction foo/1
-run/0: memory-should-contain/46 {name: "
-    1 <- 13
-  ", value: 0, type: 0, properties: ["
-    1 <- 13
-  ": "literal-string"]}
-run/0: checking location 1
-run/0: instruction foo/2
-run/0: trace-should-contain/47 {name: "
-    a: a b c
-  ", value: 0, type: 0, properties: ["
-    a: a b c
-  ": "literal-string"]}
-run/0: instruction foo/3
-run/0: trace-should-not-contain/48 {name: "
-    a: x y z
-  ", value: 0, type: 0, properties: ["
-    a: x y z
-  ": "literal-string"]}
diff --git a/cpp/.traces/scenario_multiple_blocks b/cpp/.traces/scenario_multiple_blocks
deleted file mode 100644
index 2a2b57cc..00000000
--- a/cpp/.traces/scenario_multiple_blocks
+++ /dev/null
@@ -1,80 +0,0 @@
-parse/0: instruction: run
-parse/0:   ingredient: {name: "
-    1:integer <- copy 13:literal
-  ", value: 0, type: 0, properties: ["
-    1:integer <- copy 13:literal
-  ": "literal-string"]}
-parse/0: instruction: memory-should-contain
-parse/0:   ingredient: {name: "
-    1 <- 13
-  ", value: 0, type: 0, properties: ["
-    1 <- 13
-  ": "literal-string"]}
-parse/0: instruction: run
-parse/0:   ingredient: {name: "
-    2:integer <- copy 13:literal
-  ", value: 0, type: 0, properties: ["
-    2:integer <- copy 13:literal
-  ": "literal-string"]}
-parse/0: instruction: memory-should-contain
-parse/0:   ingredient: {name: "
-    1 <- 13
-    2 <- 13
-  ", value: 0, type: 0, properties: ["
-    1 <- 13
-    2 <- 13
-  ": "literal-string"]}
-after-brace/0: recipe foo
-after-brace/0: run ...
-after-brace/0: memory-should-contain ...
-after-brace/0: run ...
-after-brace/0: memory-should-contain ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: foo
-run/0: instruction foo/0
-run/0: run/45 {name: "
-    1:integer <- copy 13:literal
-  ", value: 0, type: 0, properties: ["
-    1:integer <- copy 13:literal
-  ": "literal-string"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "13", value: 0, type: 0, properties: ["13": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-after-brace/0: recipe run1001
-after-brace/0: copy ...
-run/0: instruction run1001/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "13", value: 13, type: 0, properties: ["13": "literal"]}
-run/0: ingredient 0 is 13
-mem/0: storing 13 in location 1
-run/0: instruction foo/1
-run/0: memory-should-contain/46 {name: "
-    1 <- 13
-  ", value: 0, type: 0, properties: ["
-    1 <- 13
-  ": "literal-string"]}
-run/0: checking location 1
-run/0: instruction foo/2
-run/0: run/45 {name: "
-    2:integer <- copy 13:literal
-  ", value: 0, type: 0, properties: ["
-    2:integer <- copy 13:literal
-  ": "literal-string"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "13", value: 0, type: 0, properties: ["13": "literal"]}
-parse/0:   product: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-after-brace/0: recipe run1002
-after-brace/0: copy ...
-run/0: instruction run1002/0
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "13", value: 13, type: 0, properties: ["13": "literal"]}
-run/0: ingredient 0 is 13
-mem/0: storing 13 in location 2
-run/0: instruction foo/3
-run/0: memory-should-contain/46 {name: "
-    1 <- 13
-    2 <- 13
-  ", value: 0, type: 0, properties: ["
-    1 <- 13
-    2 <- 13
-  ": "literal-string"]}
-run/0: checking location 1
-run/0: checking location 2
diff --git a/cpp/.traces/scenario_with_comment_in_mu b/cpp/.traces/scenario_with_comment_in_mu
deleted file mode 100644
index ef0c74cc..00000000
--- a/cpp/.traces/scenario_with_comment_in_mu
+++ /dev/null
@@ -1,46 +0,0 @@
-parse/0: instruction: run
-parse/0:   ingredient: {name: "
-    # comment
-    1:integer <- add 2:literal, 2:literal
-  ", value: 0, type: 0, properties: ["
-    # comment
-    1:integer <- add 2:literal, 2:literal
-  ": "literal-string"]}
-parse/0: instruction: memory-should-contain
-parse/0:   ingredient: {name: "
-    1 <- 4
-  ", value: 0, type: 0, properties: ["
-    1 <- 4
-  ": "literal-string"]}
-after-brace/0: recipe scenario_with_comment_in_mu
-after-brace/0: run ...
-after-brace/0: memory-should-contain ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: scenario_with_comment_in_mu
-run/0: instruction scenario_with_comment_in_mu/0
-run/0: run/45 {name: "
-    # comment
-    1:integer <- add 2:literal, 2:literal
-  ", value: 0, type: 0, properties: ["
-    # comment
-    1:integer <- add 2:literal, 2:literal
-  ": "literal-string"]}
-parse/0: instruction: add
-parse/0:   ingredient: {name: "2", value: 0, type: 0, properties: ["2": "literal"]}
-parse/0:   ingredient: {name: "2", value: 0, type: 0, properties: ["2": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-after-brace/0: recipe run1001
-after-brace/0: add ...
-run/0: instruction run1001/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- add/2 {name: "2", value: 2, type: 0, properties: ["2": "literal"]}, {name: "2", value: 2, type: 0, properties: ["2": "literal"]}
-run/0: ingredient 0 is 2
-run/0: ingredient 1 is 2
-run/0: product 0 is 4
-mem/0: storing 4 in location 1
-run/0: instruction scenario_with_comment_in_mu/1
-run/0: memory-should-contain/46 {name: "
-    1 <- 4
-  ", value: 0, type: 0, properties: ["
-    1 <- 4
-  ": "literal-string"]}
-run/0: checking location 1
diff --git a/cpp/.traces/scenario_with_multiple_comments_in_mu b/cpp/.traces/scenario_with_multiple_comments_in_mu
deleted file mode 100644
index 80ad06dc..00000000
--- a/cpp/.traces/scenario_with_multiple_comments_in_mu
+++ /dev/null
@@ -1,50 +0,0 @@
-parse/0: instruction: run
-parse/0:   ingredient: {name: "
-    # comment1
-    # comment2
-    1:integer <- add 2:literal, 2:literal
-  ", value: 0, type: 0, properties: ["
-    # comment1
-    # comment2
-    1:integer <- add 2:literal, 2:literal
-  ": "literal-string"]}
-parse/0: instruction: memory-should-contain
-parse/0:   ingredient: {name: "
-    1 <- 4
-  ", value: 0, type: 0, properties: ["
-    1 <- 4
-  ": "literal-string"]}
-after-brace/0: recipe scenario_with_multiple_comments_in_mu
-after-brace/0: run ...
-after-brace/0: memory-should-contain ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: scenario_with_multiple_comments_in_mu
-run/0: instruction scenario_with_multiple_comments_in_mu/0
-run/0: run/45 {name: "
-    # comment1
-    # comment2
-    1:integer <- add 2:literal, 2:literal
-  ", value: 0, type: 0, properties: ["
-    # comment1
-    # comment2
-    1:integer <- add 2:literal, 2:literal
-  ": "literal-string"]}
-parse/0: instruction: add
-parse/0:   ingredient: {name: "2", value: 0, type: 0, properties: ["2": "literal"]}
-parse/0:   ingredient: {name: "2", value: 0, type: 0, properties: ["2": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-after-brace/0: recipe run1001
-after-brace/0: add ...
-run/0: instruction run1001/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- add/2 {name: "2", value: 2, type: 0, properties: ["2": "literal"]}, {name: "2", value: 2, type: 0, properties: ["2": "literal"]}
-run/0: ingredient 0 is 2
-run/0: ingredient 1 is 2
-run/0: product 0 is 4
-mem/0: storing 4 in location 1
-run/0: instruction scenario_with_multiple_comments_in_mu/1
-run/0: memory-should-contain/46 {name: "
-    1 <- 4
-  ", value: 0, type: 0, properties: ["
-    1 <- 4
-  ": "literal-string"]}
-run/0: checking location 1
diff --git a/cpp/.traces/scheduler b/cpp/.traces/scheduler
deleted file mode 100644
index 4f1f0a31..00000000
--- a/cpp/.traces/scheduler
+++ /dev/null
@@ -1,28 +0,0 @@
-parse/0: instruction: start-running
-parse/0:   ingredient: {name: "f2", value: 0, type: 0, properties: ["f2": "recipe"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "3", value: 0, type: 0, properties: ["3": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "4", value: 0, type: 0, properties: ["4": "literal"]}
-parse/0:   product: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-after-brace/0: recipe f1
-after-brace/0: start-running ...
-after-brace/0: copy ...
-after-brace/0: recipe f2
-after-brace/0: copy ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: f1
-run/0: instruction f1/0
-run/0: start-running/34 {name: "f2", value: 0, type: 0, properties: ["f2": "recipe"]}
-run/0: ingredient 0 is f2
-new/0: routine allocated memory from 101000 to 201000
-run/0: instruction f1/1
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "3", value: 3, type: 0, properties: ["3": "literal"]}
-run/0: ingredient 0 is 3
-mem/0: storing 3 in location 1
-schedule/0: f2
-run/0: instruction f2/0
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "4", value: 4, type: 0, properties: ["4": "literal"]}
-run/0: ingredient 0 is 4
-mem/0: storing 4 in location 2
diff --git a/cpp/.traces/scheduler_interleaves_routines b/cpp/.traces/scheduler_interleaves_routines
deleted file mode 100644
index a9d4a4fb..00000000
--- a/cpp/.traces/scheduler_interleaves_routines
+++ /dev/null
@@ -1,49 +0,0 @@
-parse/0: instruction: start-running
-parse/0:   ingredient: {name: "f2", value: 0, type: 0, properties: ["f2": "recipe"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-parse/0:   product: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "4", value: 0, type: 0, properties: ["4": "literal"]}
-parse/0:   product: {name: "3", value: 0, type: 1, properties: ["3": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "4", value: 0, type: 0, properties: ["4": "literal"]}
-parse/0:   product: {name: "4", value: 0, type: 1, properties: ["4": "integer"]}
-after-brace/0: recipe f1
-after-brace/0: start-running ...
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: recipe f2
-after-brace/0: copy ...
-after-brace/0: copy ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: f1
-run/0: instruction f1/0
-run/0: start-running/34 {name: "f2", value: 0, type: 0, properties: ["f2": "recipe"]}
-run/0: ingredient 0 is f2
-new/0: routine allocated memory from 101000 to 201000
-schedule/0: f2
-run/0: instruction f2/0
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- copy/1 {name: "4", value: 4, type: 0, properties: ["4": "literal"]}
-run/0: ingredient 0 is 4
-mem/0: storing 4 in location 3
-schedule/0: f1
-run/0: instruction f1/1
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
-mem/0: storing 0 in location 1
-schedule/0: f2
-run/0: instruction f2/1
-run/0: {name: "4", value: 4, type: 1, properties: ["4": "integer"]} <- copy/1 {name: "4", value: 4, type: 0, properties: ["4": "literal"]}
-run/0: ingredient 0 is 4
-mem/0: storing 4 in location 4
-schedule/0: f1
-run/0: instruction f1/2
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
-mem/0: storing 0 in location 2
-schedule/0: f2
-schedule/0: f1
diff --git a/cpp/.traces/scheduler_runs_single_routine b/cpp/.traces/scheduler_runs_single_routine
deleted file mode 100644
index 2847f47c..00000000
--- a/cpp/.traces/scheduler_runs_single_routine
+++ /dev/null
@@ -1,21 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-parse/0:   product: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-after-brace/0: recipe f1
-after-brace/0: copy ...
-after-brace/0: copy ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: f1
-run/0: instruction f1/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
-mem/0: storing 0 in location 1
-schedule/0: f1
-run/0: instruction f1/1
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
-mem/0: storing 0 in location 2
-schedule/0: f1
diff --git a/cpp/.traces/scheduler_skips_completed_routines b/cpp/.traces/scheduler_skips_completed_routines
deleted file mode 100644
index b8ed33a9..00000000
--- a/cpp/.traces/scheduler_skips_completed_routines
+++ /dev/null
@@ -1,28 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-parse/0:   product: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-new/0: routine allocated memory from 1000 to 101000
-new/0: routine allocated memory from 101000 to 201000
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-parse/0:   product: {name: "3", value: 0, type: 1, properties: ["3": "integer"]}
-after-brace/0: recipe f1
-after-brace/0: copy ...
-after-brace/0: recipe f2
-after-brace/0: copy ...
-after-brace/0: recipe f3
-after-brace/0: copy ...
-new/0: routine allocated memory from 201000 to 301000
-schedule/0: f3
-run/0: instruction f3/0
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
-mem/0: storing 0 in location 3
-schedule/0: f1
-run/0: instruction f1/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
-mem/0: storing 0 in location 1
diff --git a/cpp/.traces/scheduler_starts_at_middle_of_routines b/cpp/.traces/scheduler_starts_at_middle_of_routines
deleted file mode 100644
index c51216fb..00000000
--- a/cpp/.traces/scheduler_starts_at_middle_of_routines
+++ /dev/null
@@ -1,20 +0,0 @@
-new/0: routine allocated memory from 1000 to 101000
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-parse/0:   product: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-after-brace/0: recipe f1
-after-brace/0: copy ...
-after-brace/0: copy ...
-new/0: routine allocated memory from 101000 to 201000
-schedule/0: f1
-run/0: instruction f1/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
-mem/0: storing 0 in location 1
-run/0: instruction f1/1
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
-mem/0: storing 0 in location 2
diff --git a/cpp/.traces/screen_in_scenario b/cpp/.traces/screen_in_scenario
deleted file mode 100644
index 528d495b..00000000
--- a/cpp/.traces/screen_in_scenario
+++ /dev/null
@@ -1,899 +0,0 @@
-parse/0: instruction: assume-screen
-parse/0:   ingredient: {name: "5", value: 0, type: 0, properties: ["5": "literal", "width": ]}
-parse/0:   ingredient: {name: "3", value: 0, type: 0, properties: ["3": "literal", "height": ]}
-parse/0: instruction: run
-parse/0:   ingredient: {name: "
-    screen:address <- print-character screen:address, 97:literal  # 'a'
-  ", value: 0, type: 0, properties: ["
-    screen:address <- print-character screen:address, 97:literal  # 'a'
-  ": "literal-string"]}
-parse/0: instruction: screen-should-contain
-parse/0:   ingredient: {name: "
-  #  01234
-    .a    .
-    .     .
-    .     .
-  ", value: 0, type: 0, properties: ["
-  #  01234
-    .a    .
-    .     .
-    .     .
-  ": "literal-string"]}
-after-brace/0: recipe screen-in-scenario
-after-brace/0: assume-screen ...
-after-brace/0: run ...
-after-brace/0: screen-should-contain ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: screen-in-scenario
-run/0: instruction screen-in-scenario/0
-run/0: {name: "screen", value: 900, type: 2, properties: ["screen": "address"]} <- assume-screen/115 {name: "5", value: 5, type: 0, properties: ["5": "literal", "width": ]}, {name: "3", value: 3, type: 0, properties: ["3": "literal", "height": ]}
-run/0: instruction init-fake-screen/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal", "capacity": ]}
-mem/0: array size is 30
-mem/0: new alloc: 1000
-run/0: instruction init-fake-screen/1
-run/0: {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen"]} <- new/44 {name: "screen", value: 11, type: 0, properties: ["screen": "type"]}
-mem/0: new alloc: 1031
-mem/0: storing 1031 in location 1002
-run/0: instruction init-fake-screen/2
-run/0: {name: "width", value: 2, type: 2-1, properties: ["width": "address":"integer"]} <- get-address/25 {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen", "deref": ]}, {name: "num-columns", value: 1, type: 0, properties: ["num-columns": "offset"]}
-run/0: ingredient 0 is result
-mem/0: location 1002 is 1031
-run/0: ingredient 1 is num-columns
-run/0: address to copy is 1032
-run/0: product 0 is 1032
-mem/0: storing 1032 in location 1003
-run/0: instruction init-fake-screen/3
-run/0: {name: "width", value: 2, type: 2-1, properties: ["width": "address":"integer", "deref": ]} <- next-ingredient/30 
-run/0: product 0 is 5
-mem/0: location 1003 is 1032
-mem/0: storing 5 in location 1032
-run/0: instruction init-fake-screen/4
-run/0: {name: "height", value: 3, type: 2-1, properties: ["height": "address":"integer"]} <- get-address/25 {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen", "deref": ]}, {name: "num-rows", value: 0, type: 0, properties: ["num-rows": "offset"]}
-run/0: ingredient 0 is result
-mem/0: location 1002 is 1031
-run/0: ingredient 1 is num-rows
-run/0: address to copy is 1031
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1004
-run/0: instruction init-fake-screen/5
-run/0: {name: "height", value: 3, type: 2-1, properties: ["height": "address":"integer", "deref": ]} <- next-ingredient/30 
-run/0: product 0 is 3
-mem/0: location 1004 is 1031
-mem/0: storing 3 in location 1031
-run/0: instruction init-fake-screen/6
-run/0: {name: "row", value: 4, type: 2-1, properties: ["row": "address":"integer"]} <- get-address/25 {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen", "deref": ]}, {name: "cursor-row", value: 2, type: 0, properties: ["cursor-row": "offset"]}
-run/0: ingredient 0 is result
-mem/0: location 1002 is 1031
-run/0: ingredient 1 is cursor-row
-run/0: address to copy is 1033
-run/0: product 0 is 1033
-mem/0: storing 1033 in location 1005
-run/0: instruction init-fake-screen/7
-run/0: {name: "row", value: 4, type: 2-1, properties: ["row": "address":"integer", "deref": ]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
-mem/0: location 1005 is 1033
-mem/0: storing 0 in location 1033
-run/0: instruction init-fake-screen/8
-run/0: {name: "column", value: 5, type: 2-1, properties: ["column": "address":"integer"]} <- get-address/25 {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen", "deref": ]}, {name: "cursor-column", value: 3, type: 0, properties: ["cursor-column": "offset"]}
-run/0: ingredient 0 is result
-mem/0: location 1002 is 1031
-run/0: ingredient 1 is cursor-column
-run/0: address to copy is 1034
-run/0: product 0 is 1034
-mem/0: storing 1034 in location 1006
-run/0: instruction init-fake-screen/9
-run/0: {name: "column", value: 5, type: 2-1, properties: ["column": "address":"integer", "deref": ]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
-mem/0: location 1006 is 1034
-mem/0: storing 0 in location 1034
-run/0: instruction init-fake-screen/10
-run/0: {name: "bufsize", value: 6, type: 1, properties: ["bufsize": "integer"]} <- multiply/4 {name: "width", value: 2, type: 2-1, properties: ["width": "address":"integer", "deref": ]}, {name: "height", value: 3, type: 2-1, properties: ["height": "address":"integer", "deref": ]}
-run/0: ingredient 0 is width
-mem/0: location 1003 is 1032
-mem/0: location 1032 is 5
-run/0: ingredient 1 is height
-mem/0: location 1004 is 1031
-mem/0: location 1031 is 3
-run/0: ingredient 1 is 3
-run/0: product 0 is 15
-mem/0: storing 15 in location 1007
-run/0: instruction init-fake-screen/11
-run/0: {name: "buf", value: 7, type: 2-2-5-4, properties: ["buf": "address":"address":"array":"character"]} <- get-address/25 {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen", "deref": ]}, {name: "data", value: 4, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is result
-mem/0: location 1002 is 1031
-run/0: ingredient 1 is data
-run/0: address to copy is 1035
-run/0: product 0 is 1035
-mem/0: storing 1035 in location 1008
-run/0: instruction init-fake-screen/12
-run/0: {name: "buf", value: 7, type: 2-2-5-4, properties: ["buf": "address":"address":"array":"character", "deref": ]} <- new/44 {name: "character", value: 0, type: 0, properties: ["character": "literal"]}, {name: "bufsize", value: 6, type: 1, properties: ["bufsize": "integer"]}
-mem/0: location 1007 is 15
-mem/0: array size is 15
-mem/0: new alloc: 1036
-mem/0: location 1008 is 1035
-mem/0: storing 1036 in location 1035
-run/0: instruction init-fake-screen/13
-run/0: clear-screen/116 {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen"]}
-mem/0: location 1002 is 1031
-run/0: instruction clear-screen/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1052
-run/0: instruction clear-screen/1
-run/0: {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]} <- next-ingredient/30 
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1054
-run/0: instruction clear-screen/3
-run/0: break-unless/12 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]}, {name: "", value: 12, type: , properties: ["": ]}
-mem/0: location 1054 is 1031
-run/0: ingredient 0 is 1031
-run/0: jump-unless fell through
-run/0: instruction clear-screen/4
-run/0: {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character"]} <- get/24 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "data", value: 4, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1054 is 1031
-run/0: ingredient 1 is data
-run/0: address to copy is 1035
-run/0: its type is 2
-mem/0: location 1035 is 1036
-run/0: product 0 is 1036
-mem/0: storing 1036 in location 1055
-run/0: instruction clear-screen/5
-run/0: {name: "max", value: 3, type: 1, properties: ["max": "integer"]} <- length/28 {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}
-mem/0: location 1055 is 1036
-mem/0: storing 15 in location 1056
-run/0: instruction clear-screen/6
-run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
-mem/0: storing 0 in location 1057
-run/0: instruction clear-screen/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 0
-run/0: ingredient 1 is max
-mem/0: location 1056 is 15
-run/0: product 0 is 0
-mem/0: storing 0 in location 1058
-run/0: instruction clear-screen/9
-run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
-mem/0: location 1058 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction clear-screen/10
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address/27 {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is buf
-mem/0: location 1055 is 1036
-run/0: ingredient 1 is {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-mem/0: location 1057 is 0
-run/0: address to copy is 1037
-run/0: product 0 is 1037
-mem/0: storing 1037 in location 1059
-run/0: instruction clear-screen/11
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy/1 {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
-run/0: ingredient 0 is  
-mem/0: location 1059 is 1037
-mem/0: storing 0 in location 1037
-run/0: instruction clear-screen/12
-run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 0
-run/0: ingredient 1 is 1
-run/0: product 0 is 1
-mem/0: storing 1 in location 1057
-run/0: instruction clear-screen/13
-run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
-run/0: ingredient 0 is -6
-run/0: jumping to instruction 8
-run/0: instruction clear-screen/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 1
-run/0: ingredient 1 is max
-mem/0: location 1056 is 15
-run/0: product 0 is 0
-mem/0: storing 0 in location 1058
-run/0: instruction clear-screen/9
-run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
-mem/0: location 1058 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction clear-screen/10
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address/27 {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is buf
-mem/0: location 1055 is 1036
-run/0: ingredient 1 is {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-mem/0: location 1057 is 1
-run/0: address to copy is 1038
-run/0: product 0 is 1038
-mem/0: storing 1038 in location 1059
-run/0: instruction clear-screen/11
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy/1 {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
-run/0: ingredient 0 is  
-mem/0: location 1059 is 1038
-mem/0: storing 0 in location 1038
-run/0: instruction clear-screen/12
-run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 1
-run/0: ingredient 1 is 1
-run/0: product 0 is 2
-mem/0: storing 2 in location 1057
-run/0: instruction clear-screen/13
-run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
-run/0: ingredient 0 is -6
-run/0: jumping to instruction 8
-run/0: instruction clear-screen/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 2
-run/0: ingredient 1 is max
-mem/0: location 1056 is 15
-run/0: product 0 is 0
-mem/0: storing 0 in location 1058
-run/0: instruction clear-screen/9
-run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
-mem/0: location 1058 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction clear-screen/10
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address/27 {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is buf
-mem/0: location 1055 is 1036
-run/0: ingredient 1 is {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-mem/0: location 1057 is 2
-run/0: address to copy is 1039
-run/0: product 0 is 1039
-mem/0: storing 1039 in location 1059
-run/0: instruction clear-screen/11
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy/1 {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
-run/0: ingredient 0 is  
-mem/0: location 1059 is 1039
-mem/0: storing 0 in location 1039
-run/0: instruction clear-screen/12
-run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 2
-run/0: ingredient 1 is 1
-run/0: product 0 is 3
-mem/0: storing 3 in location 1057
-run/0: instruction clear-screen/13
-run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
-run/0: ingredient 0 is -6
-run/0: jumping to instruction 8
-run/0: instruction clear-screen/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 3
-run/0: ingredient 1 is max
-mem/0: location 1056 is 15
-run/0: product 0 is 0
-mem/0: storing 0 in location 1058
-run/0: instruction clear-screen/9
-run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
-mem/0: location 1058 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction clear-screen/10
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address/27 {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is buf
-mem/0: location 1055 is 1036
-run/0: ingredient 1 is {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-mem/0: location 1057 is 3
-run/0: address to copy is 1040
-run/0: product 0 is 1040
-mem/0: storing 1040 in location 1059
-run/0: instruction clear-screen/11
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy/1 {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
-run/0: ingredient 0 is  
-mem/0: location 1059 is 1040
-mem/0: storing 0 in location 1040
-run/0: instruction clear-screen/12
-run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 3
-run/0: ingredient 1 is 1
-run/0: product 0 is 4
-mem/0: storing 4 in location 1057
-run/0: instruction clear-screen/13
-run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
-run/0: ingredient 0 is -6
-run/0: jumping to instruction 8
-run/0: instruction clear-screen/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 4
-run/0: ingredient 1 is max
-mem/0: location 1056 is 15
-run/0: product 0 is 0
-mem/0: storing 0 in location 1058
-run/0: instruction clear-screen/9
-run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
-mem/0: location 1058 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction clear-screen/10
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address/27 {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is buf
-mem/0: location 1055 is 1036
-run/0: ingredient 1 is {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-mem/0: location 1057 is 4
-run/0: address to copy is 1041
-run/0: product 0 is 1041
-mem/0: storing 1041 in location 1059
-run/0: instruction clear-screen/11
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy/1 {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
-run/0: ingredient 0 is  
-mem/0: location 1059 is 1041
-mem/0: storing 0 in location 1041
-run/0: instruction clear-screen/12
-run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 4
-run/0: ingredient 1 is 1
-run/0: product 0 is 5
-mem/0: storing 5 in location 1057
-run/0: instruction clear-screen/13
-run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
-run/0: ingredient 0 is -6
-run/0: jumping to instruction 8
-run/0: instruction clear-screen/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 5
-run/0: ingredient 1 is max
-mem/0: location 1056 is 15
-run/0: product 0 is 0
-mem/0: storing 0 in location 1058
-run/0: instruction clear-screen/9
-run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
-mem/0: location 1058 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction clear-screen/10
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address/27 {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is buf
-mem/0: location 1055 is 1036
-run/0: ingredient 1 is {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-mem/0: location 1057 is 5
-run/0: address to copy is 1042
-run/0: product 0 is 1042
-mem/0: storing 1042 in location 1059
-run/0: instruction clear-screen/11
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy/1 {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
-run/0: ingredient 0 is  
-mem/0: location 1059 is 1042
-mem/0: storing 0 in location 1042
-run/0: instruction clear-screen/12
-run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 5
-run/0: ingredient 1 is 1
-run/0: product 0 is 6
-mem/0: storing 6 in location 1057
-run/0: instruction clear-screen/13
-run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
-run/0: ingredient 0 is -6
-run/0: jumping to instruction 8
-run/0: instruction clear-screen/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 6
-run/0: ingredient 1 is max
-mem/0: location 1056 is 15
-run/0: product 0 is 0
-mem/0: storing 0 in location 1058
-run/0: instruction clear-screen/9
-run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
-mem/0: location 1058 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction clear-screen/10
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address/27 {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is buf
-mem/0: location 1055 is 1036
-run/0: ingredient 1 is {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-mem/0: location 1057 is 6
-run/0: address to copy is 1043
-run/0: product 0 is 1043
-mem/0: storing 1043 in location 1059
-run/0: instruction clear-screen/11
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy/1 {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
-run/0: ingredient 0 is  
-mem/0: location 1059 is 1043
-mem/0: storing 0 in location 1043
-run/0: instruction clear-screen/12
-run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 6
-run/0: ingredient 1 is 1
-run/0: product 0 is 7
-mem/0: storing 7 in location 1057
-run/0: instruction clear-screen/13
-run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
-run/0: ingredient 0 is -6
-run/0: jumping to instruction 8
-run/0: instruction clear-screen/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 7
-run/0: ingredient 1 is max
-mem/0: location 1056 is 15
-run/0: product 0 is 0
-mem/0: storing 0 in location 1058
-run/0: instruction clear-screen/9
-run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
-mem/0: location 1058 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction clear-screen/10
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address/27 {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is buf
-mem/0: location 1055 is 1036
-run/0: ingredient 1 is {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-mem/0: location 1057 is 7
-run/0: address to copy is 1044
-run/0: product 0 is 1044
-mem/0: storing 1044 in location 1059
-run/0: instruction clear-screen/11
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy/1 {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
-run/0: ingredient 0 is  
-mem/0: location 1059 is 1044
-mem/0: storing 0 in location 1044
-run/0: instruction clear-screen/12
-run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 7
-run/0: ingredient 1 is 1
-run/0: product 0 is 8
-mem/0: storing 8 in location 1057
-run/0: instruction clear-screen/13
-run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
-run/0: ingredient 0 is -6
-run/0: jumping to instruction 8
-run/0: instruction clear-screen/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 8
-run/0: ingredient 1 is max
-mem/0: location 1056 is 15
-run/0: product 0 is 0
-mem/0: storing 0 in location 1058
-run/0: instruction clear-screen/9
-run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
-mem/0: location 1058 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction clear-screen/10
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address/27 {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is buf
-mem/0: location 1055 is 1036
-run/0: ingredient 1 is {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-mem/0: location 1057 is 8
-run/0: address to copy is 1045
-run/0: product 0 is 1045
-mem/0: storing 1045 in location 1059
-run/0: instruction clear-screen/11
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy/1 {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
-run/0: ingredient 0 is  
-mem/0: location 1059 is 1045
-mem/0: storing 0 in location 1045
-run/0: instruction clear-screen/12
-run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 8
-run/0: ingredient 1 is 1
-run/0: product 0 is 9
-mem/0: storing 9 in location 1057
-run/0: instruction clear-screen/13
-run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
-run/0: ingredient 0 is -6
-run/0: jumping to instruction 8
-run/0: instruction clear-screen/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 9
-run/0: ingredient 1 is max
-mem/0: location 1056 is 15
-run/0: product 0 is 0
-mem/0: storing 0 in location 1058
-run/0: instruction clear-screen/9
-run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
-mem/0: location 1058 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction clear-screen/10
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address/27 {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is buf
-mem/0: location 1055 is 1036
-run/0: ingredient 1 is {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-mem/0: location 1057 is 9
-run/0: address to copy is 1046
-run/0: product 0 is 1046
-mem/0: storing 1046 in location 1059
-run/0: instruction clear-screen/11
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy/1 {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
-run/0: ingredient 0 is  
-mem/0: location 1059 is 1046
-mem/0: storing 0 in location 1046
-run/0: instruction clear-screen/12
-run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 9
-run/0: ingredient 1 is 1
-run/0: product 0 is 10
-mem/0: storing 10 in location 1057
-run/0: instruction clear-screen/13
-run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
-run/0: ingredient 0 is -6
-run/0: jumping to instruction 8
-run/0: instruction clear-screen/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 10
-run/0: ingredient 1 is max
-mem/0: location 1056 is 15
-run/0: product 0 is 0
-mem/0: storing 0 in location 1058
-run/0: instruction clear-screen/9
-run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
-mem/0: location 1058 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction clear-screen/10
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address/27 {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is buf
-mem/0: location 1055 is 1036
-run/0: ingredient 1 is {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-mem/0: location 1057 is 10
-run/0: address to copy is 1047
-run/0: product 0 is 1047
-mem/0: storing 1047 in location 1059
-run/0: instruction clear-screen/11
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy/1 {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
-run/0: ingredient 0 is  
-mem/0: location 1059 is 1047
-mem/0: storing 0 in location 1047
-run/0: instruction clear-screen/12
-run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 10
-run/0: ingredient 1 is 1
-run/0: product 0 is 11
-mem/0: storing 11 in location 1057
-run/0: instruction clear-screen/13
-run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
-run/0: ingredient 0 is -6
-run/0: jumping to instruction 8
-run/0: instruction clear-screen/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 11
-run/0: ingredient 1 is max
-mem/0: location 1056 is 15
-run/0: product 0 is 0
-mem/0: storing 0 in location 1058
-run/0: instruction clear-screen/9
-run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
-mem/0: location 1058 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction clear-screen/10
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address/27 {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is buf
-mem/0: location 1055 is 1036
-run/0: ingredient 1 is {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-mem/0: location 1057 is 11
-run/0: address to copy is 1048
-run/0: product 0 is 1048
-mem/0: storing 1048 in location 1059
-run/0: instruction clear-screen/11
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy/1 {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
-run/0: ingredient 0 is  
-mem/0: location 1059 is 1048
-mem/0: storing 0 in location 1048
-run/0: instruction clear-screen/12
-run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 11
-run/0: ingredient 1 is 1
-run/0: product 0 is 12
-mem/0: storing 12 in location 1057
-run/0: instruction clear-screen/13
-run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
-run/0: ingredient 0 is -6
-run/0: jumping to instruction 8
-run/0: instruction clear-screen/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 12
-run/0: ingredient 1 is max
-mem/0: location 1056 is 15
-run/0: product 0 is 0
-mem/0: storing 0 in location 1058
-run/0: instruction clear-screen/9
-run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
-mem/0: location 1058 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction clear-screen/10
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address/27 {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is buf
-mem/0: location 1055 is 1036
-run/0: ingredient 1 is {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-mem/0: location 1057 is 12
-run/0: address to copy is 1049
-run/0: product 0 is 1049
-mem/0: storing 1049 in location 1059
-run/0: instruction clear-screen/11
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy/1 {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
-run/0: ingredient 0 is  
-mem/0: location 1059 is 1049
-mem/0: storing 0 in location 1049
-run/0: instruction clear-screen/12
-run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 12
-run/0: ingredient 1 is 1
-run/0: product 0 is 13
-mem/0: storing 13 in location 1057
-run/0: instruction clear-screen/13
-run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
-run/0: ingredient 0 is -6
-run/0: jumping to instruction 8
-run/0: instruction clear-screen/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 13
-run/0: ingredient 1 is max
-mem/0: location 1056 is 15
-run/0: product 0 is 0
-mem/0: storing 0 in location 1058
-run/0: instruction clear-screen/9
-run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
-mem/0: location 1058 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction clear-screen/10
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address/27 {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is buf
-mem/0: location 1055 is 1036
-run/0: ingredient 1 is {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-mem/0: location 1057 is 13
-run/0: address to copy is 1050
-run/0: product 0 is 1050
-mem/0: storing 1050 in location 1059
-run/0: instruction clear-screen/11
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy/1 {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
-run/0: ingredient 0 is  
-mem/0: location 1059 is 1050
-mem/0: storing 0 in location 1050
-run/0: instruction clear-screen/12
-run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 13
-run/0: ingredient 1 is 1
-run/0: product 0 is 14
-mem/0: storing 14 in location 1057
-run/0: instruction clear-screen/13
-run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
-run/0: ingredient 0 is -6
-run/0: jumping to instruction 8
-run/0: instruction clear-screen/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 14
-run/0: ingredient 1 is max
-mem/0: location 1056 is 15
-run/0: product 0 is 0
-mem/0: storing 0 in location 1058
-run/0: instruction clear-screen/9
-run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
-mem/0: location 1058 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction clear-screen/10
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address/27 {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is buf
-mem/0: location 1055 is 1036
-run/0: ingredient 1 is {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-mem/0: location 1057 is 14
-run/0: address to copy is 1051
-run/0: product 0 is 1051
-mem/0: storing 1051 in location 1059
-run/0: instruction clear-screen/11
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy/1 {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
-run/0: ingredient 0 is  
-mem/0: location 1059 is 1051
-mem/0: storing 0 in location 1051
-run/0: instruction clear-screen/12
-run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 14
-run/0: ingredient 1 is 1
-run/0: product 0 is 15
-mem/0: storing 15 in location 1057
-run/0: instruction clear-screen/13
-run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
-run/0: ingredient 0 is -6
-run/0: jumping to instruction 8
-run/0: instruction clear-screen/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 15
-run/0: ingredient 1 is max
-mem/0: location 1056 is 15
-run/0: product 0 is 1
-mem/0: storing 1 in location 1058
-run/0: instruction clear-screen/9
-run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
-mem/0: location 1058 is 1
-run/0: ingredient 0 is 1
-run/0: ingredient 1 is 
-run/0: jumping to instruction 14
-run/0: instruction clear-screen/15
-run/0: reply/33 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "same-as-ingredient": "0"]}
-mem/0: location 1054 is 1031
-run/0: instruction init-fake-screen/14
-run/0: reply/33 {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen"]}
-mem/0: location 1002 is 1031
-run/0: result 0 is 1031
-mem/0: storing 1031 in location 900
-run/0: instruction screen-in-scenario/1
-run/0: run/45 {name: "
-    screen:address <- print-character screen:address, 97:literal  # 'a'
-  ", value: 0, type: 0, properties: ["
-    screen:address <- print-character screen:address, 97:literal  # 'a'
-  ": "literal-string"]}
-parse/0: instruction: print-character
-parse/0:   ingredient: {name: "screen", value: 0, type: 2, properties: ["screen": "address"]}
-parse/0:   ingredient: {name: "97", value: 0, type: 0, properties: ["97": "literal"]}
-parse/0:   product: {name: "screen", value: 0, type: 2, properties: ["screen": "address"]}
-after-brace/0: recipe run1002
-after-brace/0: print-character ...
-run/0: instruction run1002/0
-run/0: {name: "screen", value: 900, type: 2, properties: ["screen": "address"]} <- print-character/117 {name: "screen", value: 900, type: 2, properties: ["screen": "address"]}, {name: "97", value: 97, type: 0, properties: ["97": "literal"]}
-mem/0: location 900 is 1031
-run/0: instruction print-character/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1083
-run/0: instruction print-character/1
-run/0: {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]} <- next-ingredient/30 
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1085
-run/0: instruction print-character/2
-run/0: {name: "c", value: 2, type: 4, properties: ["c": "character"]} <- next-ingredient/30 
-run/0: product 0 is 97
-mem/0: storing 97 in location 1086
-run/0: instruction print-character/4
-run/0: break-unless/12 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]}, {name: "", value: 14, type: , properties: ["": ]}
-mem/0: location 1085 is 1031
-run/0: ingredient 0 is 1031
-run/0: jump-unless fell through
-run/0: instruction print-character/5
-run/0: {name: "row", value: 3, type: 2-1, properties: ["row": "address":"integer"]} <- get-address/25 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "cursor-row", value: 2, type: 0, properties: ["cursor-row": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1085 is 1031
-run/0: ingredient 1 is cursor-row
-run/0: address to copy is 1033
-run/0: product 0 is 1033
-mem/0: storing 1033 in location 1087
-run/0: instruction print-character/6
-run/0: {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer"]} <- get-address/25 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "cursor-column", value: 3, type: 0, properties: ["cursor-column": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1085 is 1031
-run/0: ingredient 1 is cursor-column
-run/0: address to copy is 1034
-run/0: product 0 is 1034
-mem/0: storing 1034 in location 1088
-run/0: instruction print-character/7
-run/0: {name: "width", value: 5, type: 1, properties: ["width": "integer"]} <- get/24 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "num-columns", value: 1, type: 0, properties: ["num-columns": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1085 is 1031
-run/0: ingredient 1 is num-columns
-run/0: address to copy is 1032
-run/0: its type is 1
-mem/0: location 1032 is 5
-run/0: product 0 is 5
-mem/0: storing 5 in location 1089
-run/0: instruction print-character/8
-run/0: {name: "index", value: 6, type: 1, properties: ["index": "integer"]} <- multiply/4 {name: "row", value: 3, type: 2-1, properties: ["row": "address":"integer", "deref": ]}, {name: "width", value: 5, type: 1, properties: ["width": "integer"]}
-run/0: ingredient 0 is row
-mem/0: location 1087 is 1033
-mem/0: location 1033 is 0
-run/0: ingredient 1 is width
-mem/0: location 1089 is 5
-run/0: ingredient 1 is 5
-run/0: product 0 is 0
-mem/0: storing 0 in location 1090
-run/0: instruction print-character/9
-run/0: {name: "index", value: 6, type: 1, properties: ["index": "integer"]} <- add/2 {name: "index", value: 6, type: 1, properties: ["index": "integer"]}, {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]}
-run/0: ingredient 0 is index
-mem/0: location 1090 is 0
-run/0: ingredient 1 is column
-mem/0: location 1088 is 1034
-mem/0: location 1034 is 0
-run/0: product 0 is 0
-mem/0: storing 0 in location 1090
-run/0: instruction print-character/10
-run/0: {name: "buf", value: 7, type: 2-5-4, properties: ["buf": "address":"array":"character"]} <- get/24 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "data", value: 4, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1085 is 1031
-run/0: ingredient 1 is data
-run/0: address to copy is 1035
-run/0: its type is 2
-mem/0: location 1035 is 1036
-run/0: product 0 is 1036
-mem/0: storing 1036 in location 1091
-run/0: instruction print-character/11
-run/0: {name: "cursor", value: 8, type: 2-4, properties: ["cursor": "address":"character"]} <- index-address/27 {name: "buf", value: 7, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "index", value: 6, type: 1, properties: ["index": "integer"]}
-run/0: ingredient 0 is buf
-mem/0: location 1091 is 1036
-run/0: ingredient 1 is {name: "index", value: 6, type: 1, properties: ["index": "integer"]}
-mem/0: location 1090 is 0
-run/0: address to copy is 1037
-run/0: product 0 is 1037
-mem/0: storing 1037 in location 1092
-run/0: instruction print-character/12
-run/0: {name: "cursor", value: 8, type: 2-4, properties: ["cursor": "address":"character", "deref": ]} <- copy/1 {name: "c", value: 2, type: 4, properties: ["c": "character"]}
-run/0: ingredient 0 is c
-mem/0: location 1086 is 97
-mem/0: location 1092 is 1037
-mem/0: storing 97 in location 1037
-run/0: instruction print-character/14
-run/0: {name: "at-right?", value: 9, type: 3, properties: ["at-right?": "boolean"]} <- equal/13 {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]}, {name: "width", value: 5, type: 1, properties: ["width": "integer"]}
-run/0: ingredient 0 is column
-mem/0: location 1088 is 1034
-mem/0: location 1034 is 0
-run/0: ingredient 1 is width
-mem/0: location 1089 is 5
-run/0: product 0 is 0
-mem/0: storing 0 in location 1093
-run/0: instruction print-character/15
-run/0: break-if/11 {name: "at-right?", value: 9, type: 3, properties: ["at-right?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
-mem/0: location 1093 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction print-character/16
-run/0: {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]} <- add/2 {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is column
-mem/0: location 1088 is 1034
-mem/0: location 1034 is 0
-run/0: ingredient 1 is 1
-run/0: product 0 is 1
-mem/0: location 1088 is 1034
-mem/0: storing 1 in location 1034
-run/0: instruction print-character/18
-run/0: reply/33 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "same-as-ingredient": "0"]}
-mem/0: location 1085 is 1031
-run/0: result 0 is 1031
-mem/0: storing 1031 in location 900
-run/0: instruction screen-in-scenario/2
-run/0: screen-should-contain/62 {name: "
-  #  01234
-    .a    .
-    .     .
-    .     .
-  ", value: 0, type: 0, properties: ["
-  #  01234
-    .a    .
-    .     .
-    .     .
-  ": "literal-string"]}
-run/0: checking screen size at 1036
-run/0: checking location 1037
-run/0: checking location 1038
-run/0: checking location 1039
-run/0: checking location 1040
-run/0: checking location 1041
-run/0: checking location 1042
-run/0: checking location 1043
-run/0: checking location 1044
-run/0: checking location 1045
-run/0: checking location 1046
-run/0: checking location 1047
-run/0: checking location 1048
-run/0: checking location 1049
-run/0: checking location 1050
-run/0: checking location 1051
diff --git a/cpp/.traces/screen_in_scenario_error b/cpp/.traces/screen_in_scenario_error
deleted file mode 100644
index 218d5f40..00000000
--- a/cpp/.traces/screen_in_scenario_error
+++ /dev/null
@@ -1,886 +0,0 @@
-parse/0: instruction: assume-screen
-parse/0:   ingredient: {name: "5", value: 0, type: 0, properties: ["5": "literal", "width": ]}
-parse/0:   ingredient: {name: "3", value: 0, type: 0, properties: ["3": "literal", "height": ]}
-parse/0: instruction: run
-parse/0:   ingredient: {name: "
-    screen:address <- print-character screen:address, 97:literal  # 'a'
-  ", value: 0, type: 0, properties: ["
-    screen:address <- print-character screen:address, 97:literal  # 'a'
-  ": "literal-string"]}
-parse/0: instruction: screen-should-contain
-parse/0:   ingredient: {name: "
-  #  01234
-    .b    .
-    .     .
-    .     .
-  ", value: 0, type: 0, properties: ["
-  #  01234
-    .b    .
-    .     .
-    .     .
-  ": "literal-string"]}
-after-brace/0: recipe screen-in-scenario-error
-after-brace/0: assume-screen ...
-after-brace/0: run ...
-after-brace/0: screen-should-contain ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: screen-in-scenario-error
-run/0: instruction screen-in-scenario-error/0
-run/0: {name: "screen", value: 900, type: 2, properties: ["screen": "address"]} <- assume-screen/115 {name: "5", value: 5, type: 0, properties: ["5": "literal", "width": ]}, {name: "3", value: 3, type: 0, properties: ["3": "literal", "height": ]}
-run/0: instruction init-fake-screen/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal", "capacity": ]}
-mem/0: array size is 30
-mem/0: new alloc: 1000
-run/0: instruction init-fake-screen/1
-run/0: {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen"]} <- new/44 {name: "screen", value: 11, type: 0, properties: ["screen": "type"]}
-mem/0: new alloc: 1031
-mem/0: storing 1031 in location 1002
-run/0: instruction init-fake-screen/2
-run/0: {name: "width", value: 2, type: 2-1, properties: ["width": "address":"integer"]} <- get-address/25 {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen", "deref": ]}, {name: "num-columns", value: 1, type: 0, properties: ["num-columns": "offset"]}
-run/0: ingredient 0 is result
-mem/0: location 1002 is 1031
-run/0: ingredient 1 is num-columns
-run/0: address to copy is 1032
-run/0: product 0 is 1032
-mem/0: storing 1032 in location 1003
-run/0: instruction init-fake-screen/3
-run/0: {name: "width", value: 2, type: 2-1, properties: ["width": "address":"integer", "deref": ]} <- next-ingredient/30 
-run/0: product 0 is 5
-mem/0: location 1003 is 1032
-mem/0: storing 5 in location 1032
-run/0: instruction init-fake-screen/4
-run/0: {name: "height", value: 3, type: 2-1, properties: ["height": "address":"integer"]} <- get-address/25 {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen", "deref": ]}, {name: "num-rows", value: 0, type: 0, properties: ["num-rows": "offset"]}
-run/0: ingredient 0 is result
-mem/0: location 1002 is 1031
-run/0: ingredient 1 is num-rows
-run/0: address to copy is 1031
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1004
-run/0: instruction init-fake-screen/5
-run/0: {name: "height", value: 3, type: 2-1, properties: ["height": "address":"integer", "deref": ]} <- next-ingredient/30 
-run/0: product 0 is 3
-mem/0: location 1004 is 1031
-mem/0: storing 3 in location 1031
-run/0: instruction init-fake-screen/6
-run/0: {name: "row", value: 4, type: 2-1, properties: ["row": "address":"integer"]} <- get-address/25 {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen", "deref": ]}, {name: "cursor-row", value: 2, type: 0, properties: ["cursor-row": "offset"]}
-run/0: ingredient 0 is result
-mem/0: location 1002 is 1031
-run/0: ingredient 1 is cursor-row
-run/0: address to copy is 1033
-run/0: product 0 is 1033
-mem/0: storing 1033 in location 1005
-run/0: instruction init-fake-screen/7
-run/0: {name: "row", value: 4, type: 2-1, properties: ["row": "address":"integer", "deref": ]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
-mem/0: location 1005 is 1033
-mem/0: storing 0 in location 1033
-run/0: instruction init-fake-screen/8
-run/0: {name: "column", value: 5, type: 2-1, properties: ["column": "address":"integer"]} <- get-address/25 {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen", "deref": ]}, {name: "cursor-column", value: 3, type: 0, properties: ["cursor-column": "offset"]}
-run/0: ingredient 0 is result
-mem/0: location 1002 is 1031
-run/0: ingredient 1 is cursor-column
-run/0: address to copy is 1034
-run/0: product 0 is 1034
-mem/0: storing 1034 in location 1006
-run/0: instruction init-fake-screen/9
-run/0: {name: "column", value: 5, type: 2-1, properties: ["column": "address":"integer", "deref": ]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
-mem/0: location 1006 is 1034
-mem/0: storing 0 in location 1034
-run/0: instruction init-fake-screen/10
-run/0: {name: "bufsize", value: 6, type: 1, properties: ["bufsize": "integer"]} <- multiply/4 {name: "width", value: 2, type: 2-1, properties: ["width": "address":"integer", "deref": ]}, {name: "height", value: 3, type: 2-1, properties: ["height": "address":"integer", "deref": ]}
-run/0: ingredient 0 is width
-mem/0: location 1003 is 1032
-mem/0: location 1032 is 5
-run/0: ingredient 1 is height
-mem/0: location 1004 is 1031
-mem/0: location 1031 is 3
-run/0: ingredient 1 is 3
-run/0: product 0 is 15
-mem/0: storing 15 in location 1007
-run/0: instruction init-fake-screen/11
-run/0: {name: "buf", value: 7, type: 2-2-5-4, properties: ["buf": "address":"address":"array":"character"]} <- get-address/25 {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen", "deref": ]}, {name: "data", value: 4, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is result
-mem/0: location 1002 is 1031
-run/0: ingredient 1 is data
-run/0: address to copy is 1035
-run/0: product 0 is 1035
-mem/0: storing 1035 in location 1008
-run/0: instruction init-fake-screen/12
-run/0: {name: "buf", value: 7, type: 2-2-5-4, properties: ["buf": "address":"address":"array":"character", "deref": ]} <- new/44 {name: "character", value: 0, type: 0, properties: ["character": "literal"]}, {name: "bufsize", value: 6, type: 1, properties: ["bufsize": "integer"]}
-mem/0: location 1007 is 15
-mem/0: array size is 15
-mem/0: new alloc: 1036
-mem/0: location 1008 is 1035
-mem/0: storing 1036 in location 1035
-run/0: instruction init-fake-screen/13
-run/0: clear-screen/116 {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen"]}
-mem/0: location 1002 is 1031
-run/0: instruction clear-screen/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1052
-run/0: instruction clear-screen/1
-run/0: {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]} <- next-ingredient/30 
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1054
-run/0: instruction clear-screen/3
-run/0: break-unless/12 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]}, {name: "", value: 12, type: , properties: ["": ]}
-mem/0: location 1054 is 1031
-run/0: ingredient 0 is 1031
-run/0: jump-unless fell through
-run/0: instruction clear-screen/4
-run/0: {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character"]} <- get/24 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "data", value: 4, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1054 is 1031
-run/0: ingredient 1 is data
-run/0: address to copy is 1035
-run/0: its type is 2
-mem/0: location 1035 is 1036
-run/0: product 0 is 1036
-mem/0: storing 1036 in location 1055
-run/0: instruction clear-screen/5
-run/0: {name: "max", value: 3, type: 1, properties: ["max": "integer"]} <- length/28 {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}
-mem/0: location 1055 is 1036
-mem/0: storing 15 in location 1056
-run/0: instruction clear-screen/6
-run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
-mem/0: storing 0 in location 1057
-run/0: instruction clear-screen/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 0
-run/0: ingredient 1 is max
-mem/0: location 1056 is 15
-run/0: product 0 is 0
-mem/0: storing 0 in location 1058
-run/0: instruction clear-screen/9
-run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
-mem/0: location 1058 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction clear-screen/10
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address/27 {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is buf
-mem/0: location 1055 is 1036
-run/0: ingredient 1 is {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-mem/0: location 1057 is 0
-run/0: address to copy is 1037
-run/0: product 0 is 1037
-mem/0: storing 1037 in location 1059
-run/0: instruction clear-screen/11
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy/1 {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
-run/0: ingredient 0 is  
-mem/0: location 1059 is 1037
-mem/0: storing 0 in location 1037
-run/0: instruction clear-screen/12
-run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 0
-run/0: ingredient 1 is 1
-run/0: product 0 is 1
-mem/0: storing 1 in location 1057
-run/0: instruction clear-screen/13
-run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
-run/0: ingredient 0 is -6
-run/0: jumping to instruction 8
-run/0: instruction clear-screen/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 1
-run/0: ingredient 1 is max
-mem/0: location 1056 is 15
-run/0: product 0 is 0
-mem/0: storing 0 in location 1058
-run/0: instruction clear-screen/9
-run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
-mem/0: location 1058 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction clear-screen/10
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address/27 {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is buf
-mem/0: location 1055 is 1036
-run/0: ingredient 1 is {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-mem/0: location 1057 is 1
-run/0: address to copy is 1038
-run/0: product 0 is 1038
-mem/0: storing 1038 in location 1059
-run/0: instruction clear-screen/11
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy/1 {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
-run/0: ingredient 0 is  
-mem/0: location 1059 is 1038
-mem/0: storing 0 in location 1038
-run/0: instruction clear-screen/12
-run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 1
-run/0: ingredient 1 is 1
-run/0: product 0 is 2
-mem/0: storing 2 in location 1057
-run/0: instruction clear-screen/13
-run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
-run/0: ingredient 0 is -6
-run/0: jumping to instruction 8
-run/0: instruction clear-screen/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 2
-run/0: ingredient 1 is max
-mem/0: location 1056 is 15
-run/0: product 0 is 0
-mem/0: storing 0 in location 1058
-run/0: instruction clear-screen/9
-run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
-mem/0: location 1058 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction clear-screen/10
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address/27 {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is buf
-mem/0: location 1055 is 1036
-run/0: ingredient 1 is {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-mem/0: location 1057 is 2
-run/0: address to copy is 1039
-run/0: product 0 is 1039
-mem/0: storing 1039 in location 1059
-run/0: instruction clear-screen/11
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy/1 {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
-run/0: ingredient 0 is  
-mem/0: location 1059 is 1039
-mem/0: storing 0 in location 1039
-run/0: instruction clear-screen/12
-run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 2
-run/0: ingredient 1 is 1
-run/0: product 0 is 3
-mem/0: storing 3 in location 1057
-run/0: instruction clear-screen/13
-run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
-run/0: ingredient 0 is -6
-run/0: jumping to instruction 8
-run/0: instruction clear-screen/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 3
-run/0: ingredient 1 is max
-mem/0: location 1056 is 15
-run/0: product 0 is 0
-mem/0: storing 0 in location 1058
-run/0: instruction clear-screen/9
-run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
-mem/0: location 1058 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction clear-screen/10
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address/27 {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is buf
-mem/0: location 1055 is 1036
-run/0: ingredient 1 is {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-mem/0: location 1057 is 3
-run/0: address to copy is 1040
-run/0: product 0 is 1040
-mem/0: storing 1040 in location 1059
-run/0: instruction clear-screen/11
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy/1 {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
-run/0: ingredient 0 is  
-mem/0: location 1059 is 1040
-mem/0: storing 0 in location 1040
-run/0: instruction clear-screen/12
-run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 3
-run/0: ingredient 1 is 1
-run/0: product 0 is 4
-mem/0: storing 4 in location 1057
-run/0: instruction clear-screen/13
-run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
-run/0: ingredient 0 is -6
-run/0: jumping to instruction 8
-run/0: instruction clear-screen/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 4
-run/0: ingredient 1 is max
-mem/0: location 1056 is 15
-run/0: product 0 is 0
-mem/0: storing 0 in location 1058
-run/0: instruction clear-screen/9
-run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
-mem/0: location 1058 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction clear-screen/10
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address/27 {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is buf
-mem/0: location 1055 is 1036
-run/0: ingredient 1 is {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-mem/0: location 1057 is 4
-run/0: address to copy is 1041
-run/0: product 0 is 1041
-mem/0: storing 1041 in location 1059
-run/0: instruction clear-screen/11
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy/1 {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
-run/0: ingredient 0 is  
-mem/0: location 1059 is 1041
-mem/0: storing 0 in location 1041
-run/0: instruction clear-screen/12
-run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 4
-run/0: ingredient 1 is 1
-run/0: product 0 is 5
-mem/0: storing 5 in location 1057
-run/0: instruction clear-screen/13
-run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
-run/0: ingredient 0 is -6
-run/0: jumping to instruction 8
-run/0: instruction clear-screen/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 5
-run/0: ingredient 1 is max
-mem/0: location 1056 is 15
-run/0: product 0 is 0
-mem/0: storing 0 in location 1058
-run/0: instruction clear-screen/9
-run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
-mem/0: location 1058 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction clear-screen/10
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address/27 {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is buf
-mem/0: location 1055 is 1036
-run/0: ingredient 1 is {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-mem/0: location 1057 is 5
-run/0: address to copy is 1042
-run/0: product 0 is 1042
-mem/0: storing 1042 in location 1059
-run/0: instruction clear-screen/11
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy/1 {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
-run/0: ingredient 0 is  
-mem/0: location 1059 is 1042
-mem/0: storing 0 in location 1042
-run/0: instruction clear-screen/12
-run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 5
-run/0: ingredient 1 is 1
-run/0: product 0 is 6
-mem/0: storing 6 in location 1057
-run/0: instruction clear-screen/13
-run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
-run/0: ingredient 0 is -6
-run/0: jumping to instruction 8
-run/0: instruction clear-screen/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 6
-run/0: ingredient 1 is max
-mem/0: location 1056 is 15
-run/0: product 0 is 0
-mem/0: storing 0 in location 1058
-run/0: instruction clear-screen/9
-run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
-mem/0: location 1058 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction clear-screen/10
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address/27 {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is buf
-mem/0: location 1055 is 1036
-run/0: ingredient 1 is {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-mem/0: location 1057 is 6
-run/0: address to copy is 1043
-run/0: product 0 is 1043
-mem/0: storing 1043 in location 1059
-run/0: instruction clear-screen/11
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy/1 {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
-run/0: ingredient 0 is  
-mem/0: location 1059 is 1043
-mem/0: storing 0 in location 1043
-run/0: instruction clear-screen/12
-run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 6
-run/0: ingredient 1 is 1
-run/0: product 0 is 7
-mem/0: storing 7 in location 1057
-run/0: instruction clear-screen/13
-run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
-run/0: ingredient 0 is -6
-run/0: jumping to instruction 8
-run/0: instruction clear-screen/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 7
-run/0: ingredient 1 is max
-mem/0: location 1056 is 15
-run/0: product 0 is 0
-mem/0: storing 0 in location 1058
-run/0: instruction clear-screen/9
-run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
-mem/0: location 1058 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction clear-screen/10
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address/27 {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is buf
-mem/0: location 1055 is 1036
-run/0: ingredient 1 is {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-mem/0: location 1057 is 7
-run/0: address to copy is 1044
-run/0: product 0 is 1044
-mem/0: storing 1044 in location 1059
-run/0: instruction clear-screen/11
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy/1 {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
-run/0: ingredient 0 is  
-mem/0: location 1059 is 1044
-mem/0: storing 0 in location 1044
-run/0: instruction clear-screen/12
-run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 7
-run/0: ingredient 1 is 1
-run/0: product 0 is 8
-mem/0: storing 8 in location 1057
-run/0: instruction clear-screen/13
-run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
-run/0: ingredient 0 is -6
-run/0: jumping to instruction 8
-run/0: instruction clear-screen/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 8
-run/0: ingredient 1 is max
-mem/0: location 1056 is 15
-run/0: product 0 is 0
-mem/0: storing 0 in location 1058
-run/0: instruction clear-screen/9
-run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
-mem/0: location 1058 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction clear-screen/10
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address/27 {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is buf
-mem/0: location 1055 is 1036
-run/0: ingredient 1 is {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-mem/0: location 1057 is 8
-run/0: address to copy is 1045
-run/0: product 0 is 1045
-mem/0: storing 1045 in location 1059
-run/0: instruction clear-screen/11
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy/1 {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
-run/0: ingredient 0 is  
-mem/0: location 1059 is 1045
-mem/0: storing 0 in location 1045
-run/0: instruction clear-screen/12
-run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 8
-run/0: ingredient 1 is 1
-run/0: product 0 is 9
-mem/0: storing 9 in location 1057
-run/0: instruction clear-screen/13
-run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
-run/0: ingredient 0 is -6
-run/0: jumping to instruction 8
-run/0: instruction clear-screen/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 9
-run/0: ingredient 1 is max
-mem/0: location 1056 is 15
-run/0: product 0 is 0
-mem/0: storing 0 in location 1058
-run/0: instruction clear-screen/9
-run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
-mem/0: location 1058 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction clear-screen/10
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address/27 {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is buf
-mem/0: location 1055 is 1036
-run/0: ingredient 1 is {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-mem/0: location 1057 is 9
-run/0: address to copy is 1046
-run/0: product 0 is 1046
-mem/0: storing 1046 in location 1059
-run/0: instruction clear-screen/11
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy/1 {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
-run/0: ingredient 0 is  
-mem/0: location 1059 is 1046
-mem/0: storing 0 in location 1046
-run/0: instruction clear-screen/12
-run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 9
-run/0: ingredient 1 is 1
-run/0: product 0 is 10
-mem/0: storing 10 in location 1057
-run/0: instruction clear-screen/13
-run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
-run/0: ingredient 0 is -6
-run/0: jumping to instruction 8
-run/0: instruction clear-screen/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 10
-run/0: ingredient 1 is max
-mem/0: location 1056 is 15
-run/0: product 0 is 0
-mem/0: storing 0 in location 1058
-run/0: instruction clear-screen/9
-run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
-mem/0: location 1058 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction clear-screen/10
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address/27 {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is buf
-mem/0: location 1055 is 1036
-run/0: ingredient 1 is {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-mem/0: location 1057 is 10
-run/0: address to copy is 1047
-run/0: product 0 is 1047
-mem/0: storing 1047 in location 1059
-run/0: instruction clear-screen/11
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy/1 {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
-run/0: ingredient 0 is  
-mem/0: location 1059 is 1047
-mem/0: storing 0 in location 1047
-run/0: instruction clear-screen/12
-run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 10
-run/0: ingredient 1 is 1
-run/0: product 0 is 11
-mem/0: storing 11 in location 1057
-run/0: instruction clear-screen/13
-run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
-run/0: ingredient 0 is -6
-run/0: jumping to instruction 8
-run/0: instruction clear-screen/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 11
-run/0: ingredient 1 is max
-mem/0: location 1056 is 15
-run/0: product 0 is 0
-mem/0: storing 0 in location 1058
-run/0: instruction clear-screen/9
-run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
-mem/0: location 1058 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction clear-screen/10
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address/27 {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is buf
-mem/0: location 1055 is 1036
-run/0: ingredient 1 is {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-mem/0: location 1057 is 11
-run/0: address to copy is 1048
-run/0: product 0 is 1048
-mem/0: storing 1048 in location 1059
-run/0: instruction clear-screen/11
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy/1 {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
-run/0: ingredient 0 is  
-mem/0: location 1059 is 1048
-mem/0: storing 0 in location 1048
-run/0: instruction clear-screen/12
-run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 11
-run/0: ingredient 1 is 1
-run/0: product 0 is 12
-mem/0: storing 12 in location 1057
-run/0: instruction clear-screen/13
-run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
-run/0: ingredient 0 is -6
-run/0: jumping to instruction 8
-run/0: instruction clear-screen/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 12
-run/0: ingredient 1 is max
-mem/0: location 1056 is 15
-run/0: product 0 is 0
-mem/0: storing 0 in location 1058
-run/0: instruction clear-screen/9
-run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
-mem/0: location 1058 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction clear-screen/10
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address/27 {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is buf
-mem/0: location 1055 is 1036
-run/0: ingredient 1 is {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-mem/0: location 1057 is 12
-run/0: address to copy is 1049
-run/0: product 0 is 1049
-mem/0: storing 1049 in location 1059
-run/0: instruction clear-screen/11
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy/1 {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
-run/0: ingredient 0 is  
-mem/0: location 1059 is 1049
-mem/0: storing 0 in location 1049
-run/0: instruction clear-screen/12
-run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 12
-run/0: ingredient 1 is 1
-run/0: product 0 is 13
-mem/0: storing 13 in location 1057
-run/0: instruction clear-screen/13
-run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
-run/0: ingredient 0 is -6
-run/0: jumping to instruction 8
-run/0: instruction clear-screen/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 13
-run/0: ingredient 1 is max
-mem/0: location 1056 is 15
-run/0: product 0 is 0
-mem/0: storing 0 in location 1058
-run/0: instruction clear-screen/9
-run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
-mem/0: location 1058 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction clear-screen/10
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address/27 {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is buf
-mem/0: location 1055 is 1036
-run/0: ingredient 1 is {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-mem/0: location 1057 is 13
-run/0: address to copy is 1050
-run/0: product 0 is 1050
-mem/0: storing 1050 in location 1059
-run/0: instruction clear-screen/11
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy/1 {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
-run/0: ingredient 0 is  
-mem/0: location 1059 is 1050
-mem/0: storing 0 in location 1050
-run/0: instruction clear-screen/12
-run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 13
-run/0: ingredient 1 is 1
-run/0: product 0 is 14
-mem/0: storing 14 in location 1057
-run/0: instruction clear-screen/13
-run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
-run/0: ingredient 0 is -6
-run/0: jumping to instruction 8
-run/0: instruction clear-screen/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 14
-run/0: ingredient 1 is max
-mem/0: location 1056 is 15
-run/0: product 0 is 0
-mem/0: storing 0 in location 1058
-run/0: instruction clear-screen/9
-run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
-mem/0: location 1058 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction clear-screen/10
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address/27 {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is buf
-mem/0: location 1055 is 1036
-run/0: ingredient 1 is {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
-mem/0: location 1057 is 14
-run/0: address to copy is 1051
-run/0: product 0 is 1051
-mem/0: storing 1051 in location 1059
-run/0: instruction clear-screen/11
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy/1 {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
-run/0: ingredient 0 is  
-mem/0: location 1059 is 1051
-mem/0: storing 0 in location 1051
-run/0: instruction clear-screen/12
-run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 14
-run/0: ingredient 1 is 1
-run/0: product 0 is 15
-mem/0: storing 15 in location 1057
-run/0: instruction clear-screen/13
-run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
-run/0: ingredient 0 is -6
-run/0: jumping to instruction 8
-run/0: instruction clear-screen/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1057 is 15
-run/0: ingredient 1 is max
-mem/0: location 1056 is 15
-run/0: product 0 is 1
-mem/0: storing 1 in location 1058
-run/0: instruction clear-screen/9
-run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
-mem/0: location 1058 is 1
-run/0: ingredient 0 is 1
-run/0: ingredient 1 is 
-run/0: jumping to instruction 14
-run/0: instruction clear-screen/15
-run/0: reply/33 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "same-as-ingredient": "0"]}
-mem/0: location 1054 is 1031
-run/0: instruction init-fake-screen/14
-run/0: reply/33 {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen"]}
-mem/0: location 1002 is 1031
-run/0: result 0 is 1031
-mem/0: storing 1031 in location 900
-run/0: instruction screen-in-scenario-error/1
-run/0: run/45 {name: "
-    screen:address <- print-character screen:address, 97:literal  # 'a'
-  ", value: 0, type: 0, properties: ["
-    screen:address <- print-character screen:address, 97:literal  # 'a'
-  ": "literal-string"]}
-parse/0: instruction: print-character
-parse/0:   ingredient: {name: "screen", value: 0, type: 2, properties: ["screen": "address"]}
-parse/0:   ingredient: {name: "97", value: 0, type: 0, properties: ["97": "literal"]}
-parse/0:   product: {name: "screen", value: 0, type: 2, properties: ["screen": "address"]}
-after-brace/0: recipe run1001
-after-brace/0: print-character ...
-run/0: instruction run1001/0
-run/0: {name: "screen", value: 900, type: 2, properties: ["screen": "address"]} <- print-character/117 {name: "screen", value: 900, type: 2, properties: ["screen": "address"]}, {name: "97", value: 97, type: 0, properties: ["97": "literal"]}
-mem/0: location 900 is 1031
-run/0: instruction print-character/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1083
-run/0: instruction print-character/1
-run/0: {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]} <- next-ingredient/30 
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1085
-run/0: instruction print-character/2
-run/0: {name: "c", value: 2, type: 4, properties: ["c": "character"]} <- next-ingredient/30 
-run/0: product 0 is 97
-mem/0: storing 97 in location 1086
-run/0: instruction print-character/4
-run/0: break-unless/12 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]}, {name: "", value: 14, type: , properties: ["": ]}
-mem/0: location 1085 is 1031
-run/0: ingredient 0 is 1031
-run/0: jump-unless fell through
-run/0: instruction print-character/5
-run/0: {name: "row", value: 3, type: 2-1, properties: ["row": "address":"integer"]} <- get-address/25 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "cursor-row", value: 2, type: 0, properties: ["cursor-row": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1085 is 1031
-run/0: ingredient 1 is cursor-row
-run/0: address to copy is 1033
-run/0: product 0 is 1033
-mem/0: storing 1033 in location 1087
-run/0: instruction print-character/6
-run/0: {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer"]} <- get-address/25 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "cursor-column", value: 3, type: 0, properties: ["cursor-column": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1085 is 1031
-run/0: ingredient 1 is cursor-column
-run/0: address to copy is 1034
-run/0: product 0 is 1034
-mem/0: storing 1034 in location 1088
-run/0: instruction print-character/7
-run/0: {name: "width", value: 5, type: 1, properties: ["width": "integer"]} <- get/24 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "num-columns", value: 1, type: 0, properties: ["num-columns": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1085 is 1031
-run/0: ingredient 1 is num-columns
-run/0: address to copy is 1032
-run/0: its type is 1
-mem/0: location 1032 is 5
-run/0: product 0 is 5
-mem/0: storing 5 in location 1089
-run/0: instruction print-character/8
-run/0: {name: "index", value: 6, type: 1, properties: ["index": "integer"]} <- multiply/4 {name: "row", value: 3, type: 2-1, properties: ["row": "address":"integer", "deref": ]}, {name: "width", value: 5, type: 1, properties: ["width": "integer"]}
-run/0: ingredient 0 is row
-mem/0: location 1087 is 1033
-mem/0: location 1033 is 0
-run/0: ingredient 1 is width
-mem/0: location 1089 is 5
-run/0: ingredient 1 is 5
-run/0: product 0 is 0
-mem/0: storing 0 in location 1090
-run/0: instruction print-character/9
-run/0: {name: "index", value: 6, type: 1, properties: ["index": "integer"]} <- add/2 {name: "index", value: 6, type: 1, properties: ["index": "integer"]}, {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]}
-run/0: ingredient 0 is index
-mem/0: location 1090 is 0
-run/0: ingredient 1 is column
-mem/0: location 1088 is 1034
-mem/0: location 1034 is 0
-run/0: product 0 is 0
-mem/0: storing 0 in location 1090
-run/0: instruction print-character/10
-run/0: {name: "buf", value: 7, type: 2-5-4, properties: ["buf": "address":"array":"character"]} <- get/24 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "data", value: 4, type: 0, properties: ["data": "offset"]}
-run/0: ingredient 0 is x
-mem/0: location 1085 is 1031
-run/0: ingredient 1 is data
-run/0: address to copy is 1035
-run/0: its type is 2
-mem/0: location 1035 is 1036
-run/0: product 0 is 1036
-mem/0: storing 1036 in location 1091
-run/0: instruction print-character/11
-run/0: {name: "cursor", value: 8, type: 2-4, properties: ["cursor": "address":"character"]} <- index-address/27 {name: "buf", value: 7, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "index", value: 6, type: 1, properties: ["index": "integer"]}
-run/0: ingredient 0 is buf
-mem/0: location 1091 is 1036
-run/0: ingredient 1 is {name: "index", value: 6, type: 1, properties: ["index": "integer"]}
-mem/0: location 1090 is 0
-run/0: address to copy is 1037
-run/0: product 0 is 1037
-mem/0: storing 1037 in location 1092
-run/0: instruction print-character/12
-run/0: {name: "cursor", value: 8, type: 2-4, properties: ["cursor": "address":"character", "deref": ]} <- copy/1 {name: "c", value: 2, type: 4, properties: ["c": "character"]}
-run/0: ingredient 0 is c
-mem/0: location 1086 is 97
-mem/0: location 1092 is 1037
-mem/0: storing 97 in location 1037
-run/0: instruction print-character/14
-run/0: {name: "at-right?", value: 9, type: 3, properties: ["at-right?": "boolean"]} <- equal/13 {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]}, {name: "width", value: 5, type: 1, properties: ["width": "integer"]}
-run/0: ingredient 0 is column
-mem/0: location 1088 is 1034
-mem/0: location 1034 is 0
-run/0: ingredient 1 is width
-mem/0: location 1089 is 5
-run/0: product 0 is 0
-mem/0: storing 0 in location 1093
-run/0: instruction print-character/15
-run/0: break-if/11 {name: "at-right?", value: 9, type: 3, properties: ["at-right?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
-mem/0: location 1093 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction print-character/16
-run/0: {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]} <- add/2 {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is column
-mem/0: location 1088 is 1034
-mem/0: location 1034 is 0
-run/0: ingredient 1 is 1
-run/0: product 0 is 1
-mem/0: location 1088 is 1034
-mem/0: storing 1 in location 1034
-run/0: instruction print-character/18
-run/0: reply/33 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "same-as-ingredient": "0"]}
-mem/0: location 1085 is 1031
-run/0: result 0 is 1031
-mem/0: storing 1031 in location 900
-run/0: instruction screen-in-scenario-error/2
-run/0: screen-should-contain/62 {name: "
-  #  01234
-    .b    .
-    .     .
-    .     .
-  ", value: 0, type: 0, properties: ["
-  #  01234
-    .b    .
-    .     .
-    .     .
-  ": "literal-string"]}
-run/0: checking screen size at 1036
-run/0: checking location 1037
-warn/0: expected screen location (0, 0) to contain 'b' instead of 'a'
diff --git a/cpp/.traces/set_default_space b/cpp/.traces/set_default_space
deleted file mode 100644
index b26649b0..00000000
--- a/cpp/.traces/set_default_space
+++ /dev/null
@@ -1,26 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "5", value: 0, type: 0, properties: ["5": "literal"]}
-parse/0:   product: {name: "10", value: 0, type: 1, properties: ["10": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "10", value: 0, type: 0, properties: ["10": "literal"]}
-parse/0:   product: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "23", value: 0, type: 0, properties: ["23": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-after-brace/0: recipe main
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: copy ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: {name: "10", value: 10, type: 1, properties: ["10": "integer"]} <- copy/1 {name: "5", value: 5, type: 0, properties: ["5": "literal"]}
-run/0: ingredient 0 is 5
-mem/0: storing 5 in location 10
-run/0: instruction main/1
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- copy/1 {name: "10", value: 10, type: 0, properties: ["10": "literal"]}
-run/0: ingredient 0 is 10
-run/0: instruction main/2
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "23", value: 23, type: 0, properties: ["23": "literal"]}
-run/0: ingredient 0 is 23
-mem/0: storing 23 in location 12
diff --git a/cpp/.traces/start_running_returns_routine_id b/cpp/.traces/start_running_returns_routine_id
deleted file mode 100644
index dde9fca2..00000000
--- a/cpp/.traces/start_running_returns_routine_id
+++ /dev/null
@@ -1,22 +0,0 @@
-parse/0: instruction: start-running
-parse/0:   ingredient: {name: "f2", value: 0, type: 0, properties: ["f2": "recipe"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "44", value: 0, type: 0, properties: ["44": "literal"]}
-parse/0:   product: {name: "12", value: 0, type: 1, properties: ["12": "integer"]}
-after-brace/0: recipe f1
-after-brace/0: start-running ...
-after-brace/0: recipe f2
-after-brace/0: copy ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: f1
-run/0: instruction f1/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- start-running/34 {name: "f2", value: 0, type: 0, properties: ["f2": "recipe"]}
-run/0: ingredient 0 is f2
-new/0: routine allocated memory from 101000 to 201000
-mem/0: storing 2 in location 1
-schedule/0: f2
-run/0: instruction f2/0
-run/0: {name: "12", value: 12, type: 1, properties: ["12": "integer"]} <- copy/1 {name: "44", value: 44, type: 0, properties: ["44": "literal"]}
-run/0: ingredient 0 is 44
-mem/0: storing 44 in location 12
diff --git a/cpp/.traces/start_running_takes_args b/cpp/.traces/start_running_takes_args
deleted file mode 100644
index 062c7371..00000000
--- a/cpp/.traces/start_running_takes_args
+++ /dev/null
@@ -1,32 +0,0 @@
-parse/0: instruction: start-running
-parse/0:   ingredient: {name: "f2", value: 0, type: 0, properties: ["f2": "recipe"]}
-parse/0:   ingredient: {name: "3", value: 0, type: 0, properties: ["3": "literal"]}
-parse/0: instruction: next-ingredient
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0: instruction: add
-parse/0:   ingredient: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0:   ingredient: {name: "1", value: 0, type: 0, properties: ["1": "literal"]}
-parse/0:   product: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-after-brace/0: recipe f1
-after-brace/0: start-running ...
-after-brace/0: recipe f2
-after-brace/0: next-ingredient ...
-after-brace/0: add ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: f1
-run/0: instruction f1/0
-run/0: start-running/34 {name: "f2", value: 0, type: 0, properties: ["f2": "recipe"]}, {name: "3", value: 3, type: 0, properties: ["3": "literal"]}
-run/0: ingredient 0 is f2
-new/0: routine allocated memory from 101000 to 201000
-schedule/0: f2
-run/0: instruction f2/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- next-ingredient/30 
-run/0: product 0 is 3
-mem/0: storing 3 in location 1
-run/0: instruction f2/1
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- add/2 {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is 1
-mem/0: location 1 is 3
-run/0: ingredient 1 is 1
-run/0: product 0 is 4
-mem/0: storing 4 in location 2
diff --git a/cpp/.traces/store_indirect b/cpp/.traces/store_indirect
deleted file mode 100644
index 7fec6492..00000000
--- a/cpp/.traces/store_indirect
+++ /dev/null
@@ -1,20 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "2", value: 0, type: 0, properties: ["2": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 2-1, properties: ["1": "address":"integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "34", value: 0, type: 0, properties: ["34": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 2-1, properties: ["1": "address":"integer", "deref": ]}
-after-brace/0: recipe main
-after-brace/0: copy ...
-after-brace/0: copy ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 2-1, properties: ["1": "address":"integer"]} <- copy/1 {name: "2", value: 2, type: 0, properties: ["2": "literal"]}
-run/0: ingredient 0 is 2
-mem/0: storing 2 in location 1
-run/0: instruction main/1
-run/0: {name: "1", value: 1, type: 2-1, properties: ["1": "address":"integer", "deref": ]} <- copy/1 {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
-run/0: ingredient 0 is 34
-mem/0: location 1 is 2
-mem/0: storing 34 in location 2
diff --git a/cpp/.traces/string-append-1 b/cpp/.traces/string-append-1
deleted file mode 100644
index 933e2d37..00000000
--- a/cpp/.traces/string-append-1
+++ /dev/null
@@ -1,937 +0,0 @@
-parse/0: instruction: run
-parse/0:   ingredient: {name: "
-    1:address:array:character/raw <- new [hello,]
-    2:address:array:character/raw <- new [ world!]
-    3:address:array:character/raw <- string-append 1:address:array:character/raw, 2:address:array:character/raw
-    4:array:character/raw <- copy 3:address:array:character/raw/deref
-  ", value: 0, type: 0, properties: ["
-    1:address:array:character/raw <- new [hello,]
-    2:address:array:character/raw <- new [ world!]
-    3:address:array:character/raw <- string-append 1:address:array:character/raw, 2:address:array:character/raw
-    4:array:character/raw <- copy 3:address:array:character/raw/deref
-  ": "literal-string"]}
-parse/0: instruction: memory-should-contain
-parse/0:   ingredient: {name: "
-    4:string <- [hello, world!]
-  ", value: 0, type: 0, properties: ["
-    4:string <- [hello, world!]
-  ": "literal-string"]}
-after-brace/0: recipe string-append-1
-after-brace/0: run ...
-after-brace/0: memory-should-contain ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: string-append-1
-run/0: instruction string-append-1/0
-run/0: run/45 {name: "
-    1:address:array:character/raw <- new [hello,]
-    2:address:array:character/raw <- new [ world!]
-    3:address:array:character/raw <- string-append 1:address:array:character/raw, 2:address:array:character/raw
-    4:array:character/raw <- copy 3:address:array:character/raw/deref
-  ", value: 0, type: 0, properties: ["
-    1:address:array:character/raw <- new [hello,]
-    2:address:array:character/raw <- new [ world!]
-    3:address:array:character/raw <- string-append 1:address:array:character/raw, 2:address:array:character/raw
-    4:array:character/raw <- copy 3:address:array:character/raw/deref
-  ": "literal-string"]}
-parse/0: instruction: new
-parse/0:   ingredient: {name: "hello,", value: 0, type: 0, properties: ["hello,": "literal-string"]}
-parse/0:   product: {name: "1", value: 0, type: 2-5-4, properties: ["1": "address":"array":"character", "raw": ]}
-parse/0: instruction: new
-parse/0:   ingredient: {name: " world!", value: 0, type: 0, properties: [" world!": "literal-string"]}
-parse/0:   product: {name: "2", value: 0, type: 2-5-4, properties: ["2": "address":"array":"character", "raw": ]}
-parse/0: instruction: string-append
-parse/0:   ingredient: {name: "1", value: 0, type: 2-5-4, properties: ["1": "address":"array":"character", "raw": ]}
-parse/0:   ingredient: {name: "2", value: 0, type: 2-5-4, properties: ["2": "address":"array":"character", "raw": ]}
-parse/0:   product: {name: "3", value: 0, type: 2-5-4, properties: ["3": "address":"array":"character", "raw": ]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "3", value: 0, type: 2-5-4, properties: ["3": "address":"array":"character", "raw": , "deref": ]}
-parse/0:   product: {name: "4", value: 0, type: 5-4, properties: ["4": "array":"character", "raw": ]}
-new/0: hello, -> 0
-new/0:  world! -> 0
-after-brace/0: recipe run1001
-after-brace/0: new ...
-after-brace/0: new ...
-after-brace/0: string-append ...
-after-brace/0: copy ...
-run/0: instruction run1001/0
-run/0: {name: "1", value: 1, type: 2-5-4, properties: ["1": "address":"array":"character", "raw": ]} <- new/44 {name: "hello,", value: 0, type: 0, properties: ["hello,": "literal-string"]}
-mem/0: storing 1000 in location 1
-run/0: instruction run1001/1
-run/0: {name: "2", value: 2, type: 2-5-4, properties: ["2": "address":"array":"character", "raw": ]} <- new/44 {name: " world!", value: 0, type: 0, properties: [" world!": "literal-string"]}
-mem/0: storing 1007 in location 2
-run/0: instruction run1001/2
-run/0: {name: "3", value: 3, type: 2-5-4, properties: ["3": "address":"array":"character", "raw": ]} <- string-append/106 {name: "1", value: 1, type: 2-5-4, properties: ["1": "address":"array":"character", "raw": ]}, {name: "2", value: 2, type: 2-5-4, properties: ["2": "address":"array":"character", "raw": ]}
-mem/0: location 1 is 1000
-mem/0: location 2 is 1007
-run/0: instruction string-append/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1015
-run/0: instruction string-append/1
-run/0: {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character"]} <- next-ingredient/30 
-run/0: product 0 is 1000
-mem/0: storing 1000 in location 1017
-run/0: instruction string-append/2
-run/0: {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]} <- length/28 {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}
-mem/0: location 1017 is 1000
-mem/0: storing 6 in location 1018
-run/0: instruction string-append/3
-run/0: {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character"]} <- next-ingredient/30 
-run/0: product 0 is 1007
-mem/0: storing 1007 in location 1019
-run/0: instruction string-append/4
-run/0: {name: "b-len", value: 4, type: 1, properties: ["b-len": "integer"]} <- length/28 {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}
-mem/0: location 1019 is 1007
-mem/0: storing 7 in location 1020
-run/0: instruction string-append/5
-run/0: {name: "result-len", value: 5, type: 1, properties: ["result-len": "integer"]} <- add/2 {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]}, {name: "b-len", value: 4, type: 1, properties: ["b-len": "integer"]}
-run/0: ingredient 0 is a-len
-mem/0: location 1018 is 6
-run/0: ingredient 1 is b-len
-mem/0: location 1020 is 7
-run/0: product 0 is 13
-mem/0: storing 13 in location 1021
-run/0: instruction string-append/6
-run/0: {name: "result", value: 6, type: 2-5-4, properties: ["result": "address":"array":"character"]} <- new/44 {name: "character", value: 4, type: 0, properties: ["character": "type"]}, {name: "result-len", value: 5, type: 1, properties: ["result-len": "integer"]}
-mem/0: location 1021 is 13
-mem/0: array size is 13
-mem/0: new alloc: 1046
-mem/0: storing 1046 in location 1022
-run/0: instruction string-append/7
-run/0: {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
-mem/0: storing 0 in location 1023
-run/0: instruction string-append/8
-run/0: {name: "i", value: 8, type: 1, properties: ["i": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
-mem/0: storing 0 in location 1024
-run/0: instruction string-append/10
-run/0: {name: "a-done?", value: 9, type: 3, properties: ["a-done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 8, type: 1, properties: ["i": "integer"]}, {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1024 is 0
-run/0: ingredient 1 is a-len
-mem/0: location 1018 is 6
-run/0: product 0 is 0
-mem/0: storing 0 in location 1025
-run/0: instruction string-append/11
-run/0: break-if/11 {name: "a-done?", value: 9, type: 3, properties: ["a-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
-mem/0: location 1025 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction string-append/12
-run/0: {name: "out", value: 10, type: 2-4, properties: ["out": "address":"character"]} <- index-address/27 {name: "result", value: 6, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}
-run/0: ingredient 0 is result
-mem/0: location 1022 is 1046
-run/0: ingredient 1 is {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}
-mem/0: location 1023 is 0
-run/0: address to copy is 1047
-run/0: product 0 is 1047
-mem/0: storing 1047 in location 1026
-run/0: instruction string-append/13
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/26 {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}, {name: "i", value: 8, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}
-mem/0: location 1017 is 1000
-run/0: ingredient 1 is {name: "i", value: 8, type: 1, properties: ["i": "integer"]}
-mem/0: location 1024 is 0
-run/0: address to copy is 1001
-run/0: its type is 4
-mem/0: location 1001 is 104
-run/0: product 0 is 104
-mem/0: storing 104 in location 1027
-run/0: instruction string-append/14
-run/0: {name: "out", value: 10, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy/1 {name: "in", value: 11, type: 4, properties: ["in": "character"]}
-run/0: ingredient 0 is in
-mem/0: location 1027 is 104
-mem/0: location 1026 is 1047
-mem/0: storing 104 in location 1047
-run/0: instruction string-append/15
-run/0: {name: "i", value: 8, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 8, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1024 is 0
-run/0: ingredient 1 is 1
-run/0: product 0 is 1
-mem/0: storing 1 in location 1024
-run/0: instruction string-append/16
-run/0: {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]} <- add/2 {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is result-idx
-mem/0: location 1023 is 0
-run/0: ingredient 1 is 1
-run/0: product 0 is 1
-mem/0: storing 1 in location 1023
-run/0: instruction string-append/17
-run/0: loop/10 {name: "", value: -8, type: , properties: ["": ]}
-run/0: ingredient 0 is -8
-run/0: jumping to instruction 10
-run/0: instruction string-append/10
-run/0: {name: "a-done?", value: 9, type: 3, properties: ["a-done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 8, type: 1, properties: ["i": "integer"]}, {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1024 is 1
-run/0: ingredient 1 is a-len
-mem/0: location 1018 is 6
-run/0: product 0 is 0
-mem/0: storing 0 in location 1025
-run/0: instruction string-append/11
-run/0: break-if/11 {name: "a-done?", value: 9, type: 3, properties: ["a-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
-mem/0: location 1025 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction string-append/12
-run/0: {name: "out", value: 10, type: 2-4, properties: ["out": "address":"character"]} <- index-address/27 {name: "result", value: 6, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}
-run/0: ingredient 0 is result
-mem/0: location 1022 is 1046
-run/0: ingredient 1 is {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}
-mem/0: location 1023 is 1
-run/0: address to copy is 1048
-run/0: product 0 is 1048
-mem/0: storing 1048 in location 1026
-run/0: instruction string-append/13
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/26 {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}, {name: "i", value: 8, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}
-mem/0: location 1017 is 1000
-run/0: ingredient 1 is {name: "i", value: 8, type: 1, properties: ["i": "integer"]}
-mem/0: location 1024 is 1
-run/0: address to copy is 1002
-run/0: its type is 4
-mem/0: location 1002 is 101
-run/0: product 0 is 101
-mem/0: storing 101 in location 1027
-run/0: instruction string-append/14
-run/0: {name: "out", value: 10, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy/1 {name: "in", value: 11, type: 4, properties: ["in": "character"]}
-run/0: ingredient 0 is in
-mem/0: location 1027 is 101
-mem/0: location 1026 is 1048
-mem/0: storing 101 in location 1048
-run/0: instruction string-append/15
-run/0: {name: "i", value: 8, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 8, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1024 is 1
-run/0: ingredient 1 is 1
-run/0: product 0 is 2
-mem/0: storing 2 in location 1024
-run/0: instruction string-append/16
-run/0: {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]} <- add/2 {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is result-idx
-mem/0: location 1023 is 1
-run/0: ingredient 1 is 1
-run/0: product 0 is 2
-mem/0: storing 2 in location 1023
-run/0: instruction string-append/17
-run/0: loop/10 {name: "", value: -8, type: , properties: ["": ]}
-run/0: ingredient 0 is -8
-run/0: jumping to instruction 10
-run/0: instruction string-append/10
-run/0: {name: "a-done?", value: 9, type: 3, properties: ["a-done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 8, type: 1, properties: ["i": "integer"]}, {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1024 is 2
-run/0: ingredient 1 is a-len
-mem/0: location 1018 is 6
-run/0: product 0 is 0
-mem/0: storing 0 in location 1025
-run/0: instruction string-append/11
-run/0: break-if/11 {name: "a-done?", value: 9, type: 3, properties: ["a-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
-mem/0: location 1025 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction string-append/12
-run/0: {name: "out", value: 10, type: 2-4, properties: ["out": "address":"character"]} <- index-address/27 {name: "result", value: 6, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}
-run/0: ingredient 0 is result
-mem/0: location 1022 is 1046
-run/0: ingredient 1 is {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}
-mem/0: location 1023 is 2
-run/0: address to copy is 1049
-run/0: product 0 is 1049
-mem/0: storing 1049 in location 1026
-run/0: instruction string-append/13
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/26 {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}, {name: "i", value: 8, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}
-mem/0: location 1017 is 1000
-run/0: ingredient 1 is {name: "i", value: 8, type: 1, properties: ["i": "integer"]}
-mem/0: location 1024 is 2
-run/0: address to copy is 1003
-run/0: its type is 4
-mem/0: location 1003 is 108
-run/0: product 0 is 108
-mem/0: storing 108 in location 1027
-run/0: instruction string-append/14
-run/0: {name: "out", value: 10, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy/1 {name: "in", value: 11, type: 4, properties: ["in": "character"]}
-run/0: ingredient 0 is in
-mem/0: location 1027 is 108
-mem/0: location 1026 is 1049
-mem/0: storing 108 in location 1049
-run/0: instruction string-append/15
-run/0: {name: "i", value: 8, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 8, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1024 is 2
-run/0: ingredient 1 is 1
-run/0: product 0 is 3
-mem/0: storing 3 in location 1024
-run/0: instruction string-append/16
-run/0: {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]} <- add/2 {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is result-idx
-mem/0: location 1023 is 2
-run/0: ingredient 1 is 1
-run/0: product 0 is 3
-mem/0: storing 3 in location 1023
-run/0: instruction string-append/17
-run/0: loop/10 {name: "", value: -8, type: , properties: ["": ]}
-run/0: ingredient 0 is -8
-run/0: jumping to instruction 10
-run/0: instruction string-append/10
-run/0: {name: "a-done?", value: 9, type: 3, properties: ["a-done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 8, type: 1, properties: ["i": "integer"]}, {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1024 is 3
-run/0: ingredient 1 is a-len
-mem/0: location 1018 is 6
-run/0: product 0 is 0
-mem/0: storing 0 in location 1025
-run/0: instruction string-append/11
-run/0: break-if/11 {name: "a-done?", value: 9, type: 3, properties: ["a-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
-mem/0: location 1025 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction string-append/12
-run/0: {name: "out", value: 10, type: 2-4, properties: ["out": "address":"character"]} <- index-address/27 {name: "result", value: 6, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}
-run/0: ingredient 0 is result
-mem/0: location 1022 is 1046
-run/0: ingredient 1 is {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}
-mem/0: location 1023 is 3
-run/0: address to copy is 1050
-run/0: product 0 is 1050
-mem/0: storing 1050 in location 1026
-run/0: instruction string-append/13
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/26 {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}, {name: "i", value: 8, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}
-mem/0: location 1017 is 1000
-run/0: ingredient 1 is {name: "i", value: 8, type: 1, properties: ["i": "integer"]}
-mem/0: location 1024 is 3
-run/0: address to copy is 1004
-run/0: its type is 4
-mem/0: location 1004 is 108
-run/0: product 0 is 108
-mem/0: storing 108 in location 1027
-run/0: instruction string-append/14
-run/0: {name: "out", value: 10, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy/1 {name: "in", value: 11, type: 4, properties: ["in": "character"]}
-run/0: ingredient 0 is in
-mem/0: location 1027 is 108
-mem/0: location 1026 is 1050
-mem/0: storing 108 in location 1050
-run/0: instruction string-append/15
-run/0: {name: "i", value: 8, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 8, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1024 is 3
-run/0: ingredient 1 is 1
-run/0: product 0 is 4
-mem/0: storing 4 in location 1024
-run/0: instruction string-append/16
-run/0: {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]} <- add/2 {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is result-idx
-mem/0: location 1023 is 3
-run/0: ingredient 1 is 1
-run/0: product 0 is 4
-mem/0: storing 4 in location 1023
-run/0: instruction string-append/17
-run/0: loop/10 {name: "", value: -8, type: , properties: ["": ]}
-run/0: ingredient 0 is -8
-run/0: jumping to instruction 10
-run/0: instruction string-append/10
-run/0: {name: "a-done?", value: 9, type: 3, properties: ["a-done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 8, type: 1, properties: ["i": "integer"]}, {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1024 is 4
-run/0: ingredient 1 is a-len
-mem/0: location 1018 is 6
-run/0: product 0 is 0
-mem/0: storing 0 in location 1025
-run/0: instruction string-append/11
-run/0: break-if/11 {name: "a-done?", value: 9, type: 3, properties: ["a-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
-mem/0: location 1025 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction string-append/12
-run/0: {name: "out", value: 10, type: 2-4, properties: ["out": "address":"character"]} <- index-address/27 {name: "result", value: 6, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}
-run/0: ingredient 0 is result
-mem/0: location 1022 is 1046
-run/0: ingredient 1 is {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}
-mem/0: location 1023 is 4
-run/0: address to copy is 1051
-run/0: product 0 is 1051
-mem/0: storing 1051 in location 1026
-run/0: instruction string-append/13
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/26 {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}, {name: "i", value: 8, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}
-mem/0: location 1017 is 1000
-run/0: ingredient 1 is {name: "i", value: 8, type: 1, properties: ["i": "integer"]}
-mem/0: location 1024 is 4
-run/0: address to copy is 1005
-run/0: its type is 4
-mem/0: location 1005 is 111
-run/0: product 0 is 111
-mem/0: storing 111 in location 1027
-run/0: instruction string-append/14
-run/0: {name: "out", value: 10, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy/1 {name: "in", value: 11, type: 4, properties: ["in": "character"]}
-run/0: ingredient 0 is in
-mem/0: location 1027 is 111
-mem/0: location 1026 is 1051
-mem/0: storing 111 in location 1051
-run/0: instruction string-append/15
-run/0: {name: "i", value: 8, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 8, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1024 is 4
-run/0: ingredient 1 is 1
-run/0: product 0 is 5
-mem/0: storing 5 in location 1024
-run/0: instruction string-append/16
-run/0: {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]} <- add/2 {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is result-idx
-mem/0: location 1023 is 4
-run/0: ingredient 1 is 1
-run/0: product 0 is 5
-mem/0: storing 5 in location 1023
-run/0: instruction string-append/17
-run/0: loop/10 {name: "", value: -8, type: , properties: ["": ]}
-run/0: ingredient 0 is -8
-run/0: jumping to instruction 10
-run/0: instruction string-append/10
-run/0: {name: "a-done?", value: 9, type: 3, properties: ["a-done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 8, type: 1, properties: ["i": "integer"]}, {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1024 is 5
-run/0: ingredient 1 is a-len
-mem/0: location 1018 is 6
-run/0: product 0 is 0
-mem/0: storing 0 in location 1025
-run/0: instruction string-append/11
-run/0: break-if/11 {name: "a-done?", value: 9, type: 3, properties: ["a-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
-mem/0: location 1025 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction string-append/12
-run/0: {name: "out", value: 10, type: 2-4, properties: ["out": "address":"character"]} <- index-address/27 {name: "result", value: 6, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}
-run/0: ingredient 0 is result
-mem/0: location 1022 is 1046
-run/0: ingredient 1 is {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}
-mem/0: location 1023 is 5
-run/0: address to copy is 1052
-run/0: product 0 is 1052
-mem/0: storing 1052 in location 1026
-run/0: instruction string-append/13
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/26 {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}, {name: "i", value: 8, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}
-mem/0: location 1017 is 1000
-run/0: ingredient 1 is {name: "i", value: 8, type: 1, properties: ["i": "integer"]}
-mem/0: location 1024 is 5
-run/0: address to copy is 1006
-run/0: its type is 4
-mem/0: location 1006 is 44
-run/0: product 0 is 44
-mem/0: storing 44 in location 1027
-run/0: instruction string-append/14
-run/0: {name: "out", value: 10, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy/1 {name: "in", value: 11, type: 4, properties: ["in": "character"]}
-run/0: ingredient 0 is in
-mem/0: location 1027 is 44
-mem/0: location 1026 is 1052
-mem/0: storing 44 in location 1052
-run/0: instruction string-append/15
-run/0: {name: "i", value: 8, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 8, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1024 is 5
-run/0: ingredient 1 is 1
-run/0: product 0 is 6
-mem/0: storing 6 in location 1024
-run/0: instruction string-append/16
-run/0: {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]} <- add/2 {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is result-idx
-mem/0: location 1023 is 5
-run/0: ingredient 1 is 1
-run/0: product 0 is 6
-mem/0: storing 6 in location 1023
-run/0: instruction string-append/17
-run/0: loop/10 {name: "", value: -8, type: , properties: ["": ]}
-run/0: ingredient 0 is -8
-run/0: jumping to instruction 10
-run/0: instruction string-append/10
-run/0: {name: "a-done?", value: 9, type: 3, properties: ["a-done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 8, type: 1, properties: ["i": "integer"]}, {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1024 is 6
-run/0: ingredient 1 is a-len
-mem/0: location 1018 is 6
-run/0: product 0 is 1
-mem/0: storing 1 in location 1025
-run/0: instruction string-append/11
-run/0: break-if/11 {name: "a-done?", value: 9, type: 3, properties: ["a-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
-mem/0: location 1025 is 1
-run/0: ingredient 0 is 1
-run/0: ingredient 1 is 
-run/0: jumping to instruction 18
-run/0: instruction string-append/19
-run/0: {name: "i", value: 8, type: 1, properties: ["i": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
-mem/0: storing 0 in location 1024
-run/0: instruction string-append/21
-run/0: {name: "b-done?", value: 12, type: 3, properties: ["b-done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 8, type: 1, properties: ["i": "integer"]}, {name: "b-len", value: 4, type: 1, properties: ["b-len": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1024 is 0
-run/0: ingredient 1 is b-len
-mem/0: location 1020 is 7
-run/0: product 0 is 0
-mem/0: storing 0 in location 1028
-run/0: instruction string-append/22
-run/0: break-if/11 {name: "b-done?", value: 12, type: 3, properties: ["b-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
-mem/0: location 1028 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction string-append/23
-run/0: {name: "out", value: 10, type: 2-4, properties: ["out": "address":"character"]} <- index-address/27 {name: "result", value: 6, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}
-run/0: ingredient 0 is result
-mem/0: location 1022 is 1046
-run/0: ingredient 1 is {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}
-mem/0: location 1023 is 6
-run/0: address to copy is 1053
-run/0: product 0 is 1053
-mem/0: storing 1053 in location 1026
-run/0: instruction string-append/24
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/26 {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}, {name: "i", value: 8, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}
-mem/0: location 1019 is 1007
-run/0: ingredient 1 is {name: "i", value: 8, type: 1, properties: ["i": "integer"]}
-mem/0: location 1024 is 0
-run/0: address to copy is 1008
-run/0: its type is 4
-mem/0: location 1008 is 32
-run/0: product 0 is 32
-mem/0: storing 32 in location 1027
-run/0: instruction string-append/25
-run/0: {name: "out", value: 10, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy/1 {name: "in", value: 11, type: 4, properties: ["in": "character"]}
-run/0: ingredient 0 is in
-mem/0: location 1027 is 32
-mem/0: location 1026 is 1053
-mem/0: storing 32 in location 1053
-run/0: instruction string-append/26
-run/0: {name: "i", value: 8, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 8, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1024 is 0
-run/0: ingredient 1 is 1
-run/0: product 0 is 1
-mem/0: storing 1 in location 1024
-run/0: instruction string-append/27
-run/0: {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]} <- add/2 {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is result-idx
-mem/0: location 1023 is 6
-run/0: ingredient 1 is 1
-run/0: product 0 is 7
-mem/0: storing 7 in location 1023
-run/0: instruction string-append/28
-run/0: loop/10 {name: "", value: -8, type: , properties: ["": ]}
-run/0: ingredient 0 is -8
-run/0: jumping to instruction 21
-run/0: instruction string-append/21
-run/0: {name: "b-done?", value: 12, type: 3, properties: ["b-done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 8, type: 1, properties: ["i": "integer"]}, {name: "b-len", value: 4, type: 1, properties: ["b-len": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1024 is 1
-run/0: ingredient 1 is b-len
-mem/0: location 1020 is 7
-run/0: product 0 is 0
-mem/0: storing 0 in location 1028
-run/0: instruction string-append/22
-run/0: break-if/11 {name: "b-done?", value: 12, type: 3, properties: ["b-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
-mem/0: location 1028 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction string-append/23
-run/0: {name: "out", value: 10, type: 2-4, properties: ["out": "address":"character"]} <- index-address/27 {name: "result", value: 6, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}
-run/0: ingredient 0 is result
-mem/0: location 1022 is 1046
-run/0: ingredient 1 is {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}
-mem/0: location 1023 is 7
-run/0: address to copy is 1054
-run/0: product 0 is 1054
-mem/0: storing 1054 in location 1026
-run/0: instruction string-append/24
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/26 {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}, {name: "i", value: 8, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}
-mem/0: location 1019 is 1007
-run/0: ingredient 1 is {name: "i", value: 8, type: 1, properties: ["i": "integer"]}
-mem/0: location 1024 is 1
-run/0: address to copy is 1009
-run/0: its type is 4
-mem/0: location 1009 is 119
-run/0: product 0 is 119
-mem/0: storing 119 in location 1027
-run/0: instruction string-append/25
-run/0: {name: "out", value: 10, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy/1 {name: "in", value: 11, type: 4, properties: ["in": "character"]}
-run/0: ingredient 0 is in
-mem/0: location 1027 is 119
-mem/0: location 1026 is 1054
-mem/0: storing 119 in location 1054
-run/0: instruction string-append/26
-run/0: {name: "i", value: 8, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 8, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1024 is 1
-run/0: ingredient 1 is 1
-run/0: product 0 is 2
-mem/0: storing 2 in location 1024
-run/0: instruction string-append/27
-run/0: {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]} <- add/2 {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is result-idx
-mem/0: location 1023 is 7
-run/0: ingredient 1 is 1
-run/0: product 0 is 8
-mem/0: storing 8 in location 1023
-run/0: instruction string-append/28
-run/0: loop/10 {name: "", value: -8, type: , properties: ["": ]}
-run/0: ingredient 0 is -8
-run/0: jumping to instruction 21
-run/0: instruction string-append/21
-run/0: {name: "b-done?", value: 12, type: 3, properties: ["b-done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 8, type: 1, properties: ["i": "integer"]}, {name: "b-len", value: 4, type: 1, properties: ["b-len": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1024 is 2
-run/0: ingredient 1 is b-len
-mem/0: location 1020 is 7
-run/0: product 0 is 0
-mem/0: storing 0 in location 1028
-run/0: instruction string-append/22
-run/0: break-if/11 {name: "b-done?", value: 12, type: 3, properties: ["b-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
-mem/0: location 1028 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction string-append/23
-run/0: {name: "out", value: 10, type: 2-4, properties: ["out": "address":"character"]} <- index-address/27 {name: "result", value: 6, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}
-run/0: ingredient 0 is result
-mem/0: location 1022 is 1046
-run/0: ingredient 1 is {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}
-mem/0: location 1023 is 8
-run/0: address to copy is 1055
-run/0: product 0 is 1055
-mem/0: storing 1055 in location 1026
-run/0: instruction string-append/24
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/26 {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}, {name: "i", value: 8, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}
-mem/0: location 1019 is 1007
-run/0: ingredient 1 is {name: "i", value: 8, type: 1, properties: ["i": "integer"]}
-mem/0: location 1024 is 2
-run/0: address to copy is 1010
-run/0: its type is 4
-mem/0: location 1010 is 111
-run/0: product 0 is 111
-mem/0: storing 111 in location 1027
-run/0: instruction string-append/25
-run/0: {name: "out", value: 10, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy/1 {name: "in", value: 11, type: 4, properties: ["in": "character"]}
-run/0: ingredient 0 is in
-mem/0: location 1027 is 111
-mem/0: location 1026 is 1055
-mem/0: storing 111 in location 1055
-run/0: instruction string-append/26
-run/0: {name: "i", value: 8, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 8, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1024 is 2
-run/0: ingredient 1 is 1
-run/0: product 0 is 3
-mem/0: storing 3 in location 1024
-run/0: instruction string-append/27
-run/0: {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]} <- add/2 {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is result-idx
-mem/0: location 1023 is 8
-run/0: ingredient 1 is 1
-run/0: product 0 is 9
-mem/0: storing 9 in location 1023
-run/0: instruction string-append/28
-run/0: loop/10 {name: "", value: -8, type: , properties: ["": ]}
-run/0: ingredient 0 is -8
-run/0: jumping to instruction 21
-run/0: instruction string-append/21
-run/0: {name: "b-done?", value: 12, type: 3, properties: ["b-done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 8, type: 1, properties: ["i": "integer"]}, {name: "b-len", value: 4, type: 1, properties: ["b-len": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1024 is 3
-run/0: ingredient 1 is b-len
-mem/0: location 1020 is 7
-run/0: product 0 is 0
-mem/0: storing 0 in location 1028
-run/0: instruction string-append/22
-run/0: break-if/11 {name: "b-done?", value: 12, type: 3, properties: ["b-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
-mem/0: location 1028 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction string-append/23
-run/0: {name: "out", value: 10, type: 2-4, properties: ["out": "address":"character"]} <- index-address/27 {name: "result", value: 6, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}
-run/0: ingredient 0 is result
-mem/0: location 1022 is 1046
-run/0: ingredient 1 is {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}
-mem/0: location 1023 is 9
-run/0: address to copy is 1056
-run/0: product 0 is 1056
-mem/0: storing 1056 in location 1026
-run/0: instruction string-append/24
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/26 {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}, {name: "i", value: 8, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}
-mem/0: location 1019 is 1007
-run/0: ingredient 1 is {name: "i", value: 8, type: 1, properties: ["i": "integer"]}
-mem/0: location 1024 is 3
-run/0: address to copy is 1011
-run/0: its type is 4
-mem/0: location 1011 is 114
-run/0: product 0 is 114
-mem/0: storing 114 in location 1027
-run/0: instruction string-append/25
-run/0: {name: "out", value: 10, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy/1 {name: "in", value: 11, type: 4, properties: ["in": "character"]}
-run/0: ingredient 0 is in
-mem/0: location 1027 is 114
-mem/0: location 1026 is 1056
-mem/0: storing 114 in location 1056
-run/0: instruction string-append/26
-run/0: {name: "i", value: 8, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 8, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1024 is 3
-run/0: ingredient 1 is 1
-run/0: product 0 is 4
-mem/0: storing 4 in location 1024
-run/0: instruction string-append/27
-run/0: {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]} <- add/2 {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is result-idx
-mem/0: location 1023 is 9
-run/0: ingredient 1 is 1
-run/0: product 0 is 10
-mem/0: storing 10 in location 1023
-run/0: instruction string-append/28
-run/0: loop/10 {name: "", value: -8, type: , properties: ["": ]}
-run/0: ingredient 0 is -8
-run/0: jumping to instruction 21
-run/0: instruction string-append/21
-run/0: {name: "b-done?", value: 12, type: 3, properties: ["b-done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 8, type: 1, properties: ["i": "integer"]}, {name: "b-len", value: 4, type: 1, properties: ["b-len": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1024 is 4
-run/0: ingredient 1 is b-len
-mem/0: location 1020 is 7
-run/0: product 0 is 0
-mem/0: storing 0 in location 1028
-run/0: instruction string-append/22
-run/0: break-if/11 {name: "b-done?", value: 12, type: 3, properties: ["b-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
-mem/0: location 1028 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction string-append/23
-run/0: {name: "out", value: 10, type: 2-4, properties: ["out": "address":"character"]} <- index-address/27 {name: "result", value: 6, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}
-run/0: ingredient 0 is result
-mem/0: location 1022 is 1046
-run/0: ingredient 1 is {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}
-mem/0: location 1023 is 10
-run/0: address to copy is 1057
-run/0: product 0 is 1057
-mem/0: storing 1057 in location 1026
-run/0: instruction string-append/24
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/26 {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}, {name: "i", value: 8, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}
-mem/0: location 1019 is 1007
-run/0: ingredient 1 is {name: "i", value: 8, type: 1, properties: ["i": "integer"]}
-mem/0: location 1024 is 4
-run/0: address to copy is 1012
-run/0: its type is 4
-mem/0: location 1012 is 108
-run/0: product 0 is 108
-mem/0: storing 108 in location 1027
-run/0: instruction string-append/25
-run/0: {name: "out", value: 10, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy/1 {name: "in", value: 11, type: 4, properties: ["in": "character"]}
-run/0: ingredient 0 is in
-mem/0: location 1027 is 108
-mem/0: location 1026 is 1057
-mem/0: storing 108 in location 1057
-run/0: instruction string-append/26
-run/0: {name: "i", value: 8, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 8, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1024 is 4
-run/0: ingredient 1 is 1
-run/0: product 0 is 5
-mem/0: storing 5 in location 1024
-run/0: instruction string-append/27
-run/0: {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]} <- add/2 {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is result-idx
-mem/0: location 1023 is 10
-run/0: ingredient 1 is 1
-run/0: product 0 is 11
-mem/0: storing 11 in location 1023
-run/0: instruction string-append/28
-run/0: loop/10 {name: "", value: -8, type: , properties: ["": ]}
-run/0: ingredient 0 is -8
-run/0: jumping to instruction 21
-run/0: instruction string-append/21
-run/0: {name: "b-done?", value: 12, type: 3, properties: ["b-done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 8, type: 1, properties: ["i": "integer"]}, {name: "b-len", value: 4, type: 1, properties: ["b-len": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1024 is 5
-run/0: ingredient 1 is b-len
-mem/0: location 1020 is 7
-run/0: product 0 is 0
-mem/0: storing 0 in location 1028
-run/0: instruction string-append/22
-run/0: break-if/11 {name: "b-done?", value: 12, type: 3, properties: ["b-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
-mem/0: location 1028 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction string-append/23
-run/0: {name: "out", value: 10, type: 2-4, properties: ["out": "address":"character"]} <- index-address/27 {name: "result", value: 6, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}
-run/0: ingredient 0 is result
-mem/0: location 1022 is 1046
-run/0: ingredient 1 is {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}
-mem/0: location 1023 is 11
-run/0: address to copy is 1058
-run/0: product 0 is 1058
-mem/0: storing 1058 in location 1026
-run/0: instruction string-append/24
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/26 {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}, {name: "i", value: 8, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}
-mem/0: location 1019 is 1007
-run/0: ingredient 1 is {name: "i", value: 8, type: 1, properties: ["i": "integer"]}
-mem/0: location 1024 is 5
-run/0: address to copy is 1013
-run/0: its type is 4
-mem/0: location 1013 is 100
-run/0: product 0 is 100
-mem/0: storing 100 in location 1027
-run/0: instruction string-append/25
-run/0: {name: "out", value: 10, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy/1 {name: "in", value: 11, type: 4, properties: ["in": "character"]}
-run/0: ingredient 0 is in
-mem/0: location 1027 is 100
-mem/0: location 1026 is 1058
-mem/0: storing 100 in location 1058
-run/0: instruction string-append/26
-run/0: {name: "i", value: 8, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 8, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1024 is 5
-run/0: ingredient 1 is 1
-run/0: product 0 is 6
-mem/0: storing 6 in location 1024
-run/0: instruction string-append/27
-run/0: {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]} <- add/2 {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is result-idx
-mem/0: location 1023 is 11
-run/0: ingredient 1 is 1
-run/0: product 0 is 12
-mem/0: storing 12 in location 1023
-run/0: instruction string-append/28
-run/0: loop/10 {name: "", value: -8, type: , properties: ["": ]}
-run/0: ingredient 0 is -8
-run/0: jumping to instruction 21
-run/0: instruction string-append/21
-run/0: {name: "b-done?", value: 12, type: 3, properties: ["b-done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 8, type: 1, properties: ["i": "integer"]}, {name: "b-len", value: 4, type: 1, properties: ["b-len": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1024 is 6
-run/0: ingredient 1 is b-len
-mem/0: location 1020 is 7
-run/0: product 0 is 0
-mem/0: storing 0 in location 1028
-run/0: instruction string-append/22
-run/0: break-if/11 {name: "b-done?", value: 12, type: 3, properties: ["b-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
-mem/0: location 1028 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction string-append/23
-run/0: {name: "out", value: 10, type: 2-4, properties: ["out": "address":"character"]} <- index-address/27 {name: "result", value: 6, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}
-run/0: ingredient 0 is result
-mem/0: location 1022 is 1046
-run/0: ingredient 1 is {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}
-mem/0: location 1023 is 12
-run/0: address to copy is 1059
-run/0: product 0 is 1059
-mem/0: storing 1059 in location 1026
-run/0: instruction string-append/24
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/26 {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}, {name: "i", value: 8, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}
-mem/0: location 1019 is 1007
-run/0: ingredient 1 is {name: "i", value: 8, type: 1, properties: ["i": "integer"]}
-mem/0: location 1024 is 6
-run/0: address to copy is 1014
-run/0: its type is 4
-mem/0: location 1014 is 33
-run/0: product 0 is 33
-mem/0: storing 33 in location 1027
-run/0: instruction string-append/25
-run/0: {name: "out", value: 10, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy/1 {name: "in", value: 11, type: 4, properties: ["in": "character"]}
-run/0: ingredient 0 is in
-mem/0: location 1027 is 33
-mem/0: location 1026 is 1059
-mem/0: storing 33 in location 1059
-run/0: instruction string-append/26
-run/0: {name: "i", value: 8, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 8, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1024 is 6
-run/0: ingredient 1 is 1
-run/0: product 0 is 7
-mem/0: storing 7 in location 1024
-run/0: instruction string-append/27
-run/0: {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]} <- add/2 {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is result-idx
-mem/0: location 1023 is 12
-run/0: ingredient 1 is 1
-run/0: product 0 is 13
-mem/0: storing 13 in location 1023
-run/0: instruction string-append/28
-run/0: loop/10 {name: "", value: -8, type: , properties: ["": ]}
-run/0: ingredient 0 is -8
-run/0: jumping to instruction 21
-run/0: instruction string-append/21
-run/0: {name: "b-done?", value: 12, type: 3, properties: ["b-done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 8, type: 1, properties: ["i": "integer"]}, {name: "b-len", value: 4, type: 1, properties: ["b-len": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1024 is 7
-run/0: ingredient 1 is b-len
-mem/0: location 1020 is 7
-run/0: product 0 is 1
-mem/0: storing 1 in location 1028
-run/0: instruction string-append/22
-run/0: break-if/11 {name: "b-done?", value: 12, type: 3, properties: ["b-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
-mem/0: location 1028 is 1
-run/0: ingredient 0 is 1
-run/0: ingredient 1 is 
-run/0: jumping to instruction 29
-run/0: instruction string-append/30
-run/0: reply/33 {name: "result", value: 6, type: 2-5-4, properties: ["result": "address":"array":"character"]}
-mem/0: location 1022 is 1046
-run/0: result 0 is 1046
-mem/0: storing 1046 in location 3
-run/0: instruction run1001/3
-run/0: {name: "4", value: 4, type: 5-4, properties: ["4": "array":"character", "raw": ]} <- copy/1 {name: "3", value: 3, type: 2-5-4, properties: ["3": "address":"array":"character", "raw": , "deref": ]}
-run/0: ingredient 0 is 3
-mem/0: location 3 is 1046
-mem/0: location 1046 is 13
-mem/0: location 1047 is 104
-mem/0: location 1048 is 101
-mem/0: location 1049 is 108
-mem/0: location 1050 is 108
-mem/0: location 1051 is 111
-mem/0: location 1052 is 44
-mem/0: location 1053 is 32
-mem/0: location 1054 is 119
-mem/0: location 1055 is 111
-mem/0: location 1056 is 114
-mem/0: location 1057 is 108
-mem/0: location 1058 is 100
-mem/0: location 1059 is 33
-mem/0: storing 13 in location 4
-mem/0: storing 104 in location 5
-mem/0: storing 101 in location 6
-mem/0: storing 108 in location 7
-mem/0: storing 108 in location 8
-mem/0: storing 111 in location 9
-mem/0: storing 44 in location 10
-mem/0: storing 32 in location 11
-mem/0: storing 119 in location 12
-mem/0: storing 111 in location 13
-mem/0: storing 114 in location 14
-mem/0: storing 108 in location 15
-mem/0: storing 100 in location 16
-mem/0: storing 33 in location 17
-run/0: instruction string-append-1/1
-run/0: memory-should-contain/46 {name: "
-    4:string <- [hello, world!]
-  ", value: 0, type: 0, properties: ["
-    4:string <- [hello, world!]
-  ": "literal-string"]}
-run/0: checking string length at 4
-run/0: checking location 5
-run/0: checking location 6
-run/0: checking location 7
-run/0: checking location 8
-run/0: checking location 9
-run/0: checking location 10
-run/0: checking location 11
-run/0: checking location 12
-run/0: checking location 13
-run/0: checking location 14
-run/0: checking location 15
-run/0: checking location 16
-run/0: checking location 17
diff --git a/cpp/.traces/string-equal-common-lengths-but-distinct b/cpp/.traces/string-equal-common-lengths-but-distinct
deleted file mode 100644
index 4af26a30..00000000
--- a/cpp/.traces/string-equal-common-lengths-but-distinct
+++ /dev/null
@@ -1,296 +0,0 @@
-parse/0: instruction: run
-parse/0:   ingredient: {name: "
-    default-space:address:array:location <- new location:type, 30:literal
-    x:address:array:character <- new [abc]
-    y:address:array:character <- new [abd]
-    3:boolean/raw <- string-equal x:address:array:character, y:address:array:character
-  ", value: 0, type: 0, properties: ["
-    default-space:address:array:location <- new location:type, 30:literal
-    x:address:array:character <- new [abc]
-    y:address:array:character <- new [abd]
-    3:boolean/raw <- string-equal x:address:array:character, y:address:array:character
-  ": "literal-string"]}
-parse/0: instruction: memory-should-contain
-parse/0:   ingredient: {name: "
-    3 <- 0  # abc != abd
-  ", value: 0, type: 0, properties: ["
-    3 <- 0  # abc != abd
-  ": "literal-string"]}
-after-brace/0: recipe string-equal-common-lengths-but-distinct
-after-brace/0: run ...
-after-brace/0: memory-should-contain ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: string-equal-common-lengths-but-distinct
-run/0: instruction string-equal-common-lengths-but-distinct/0
-run/0: run/45 {name: "
-    default-space:address:array:location <- new location:type, 30:literal
-    x:address:array:character <- new [abc]
-    y:address:array:character <- new [abd]
-    3:boolean/raw <- string-equal x:address:array:character, y:address:array:character
-  ", value: 0, type: 0, properties: ["
-    default-space:address:array:location <- new location:type, 30:literal
-    x:address:array:character <- new [abc]
-    y:address:array:character <- new [abd]
-    3:boolean/raw <- string-equal x:address:array:character, y:address:array:character
-  ": "literal-string"]}
-parse/0: instruction: new
-parse/0:   ingredient: {name: "location", value: 0, type: 0, properties: ["location": "type"]}
-parse/0:   ingredient: {name: "30", value: 0, type: 0, properties: ["30": "literal"]}
-parse/0:   product: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]}
-parse/0: instruction: new
-parse/0:   ingredient: {name: "abc", value: 0, type: 0, properties: ["abc": "literal-string"]}
-parse/0:   product: {name: "x", value: 0, type: 2-5-4, properties: ["x": "address":"array":"character"]}
-parse/0: instruction: new
-parse/0:   ingredient: {name: "abd", value: 0, type: 0, properties: ["abd": "literal-string"]}
-parse/0:   product: {name: "y", value: 0, type: 2-5-4, properties: ["y": "address":"array":"character"]}
-parse/0: instruction: string-equal
-parse/0:   ingredient: {name: "x", value: 0, type: 2-5-4, properties: ["x": "address":"array":"character"]}
-parse/0:   ingredient: {name: "y", value: 0, type: 2-5-4, properties: ["y": "address":"array":"character"]}
-parse/0:   product: {name: "3", value: 0, type: 3, properties: ["3": "boolean", "raw": ]}
-new/0: location -> 1
-new/0: abc -> 0
-name/0: assign x 1
-new/0: abd -> 0
-name/0: assign y 2
-after-brace/0: recipe run1001
-after-brace/0: new ...
-after-brace/0: new ...
-after-brace/0: new ...
-after-brace/0: string-equal ...
-run/0: instruction run1001/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1000
-run/0: instruction run1001/1
-run/0: {name: "x", value: 1, type: 2-5-4, properties: ["x": "address":"array":"character"]} <- new/44 {name: "abc", value: 0, type: 0, properties: ["abc": "literal-string"]}
-mem/0: storing 1031 in location 1002
-run/0: instruction run1001/2
-run/0: {name: "y", value: 2, type: 2-5-4, properties: ["y": "address":"array":"character"]} <- new/44 {name: "abd", value: 0, type: 0, properties: ["abd": "literal-string"]}
-mem/0: storing 1035 in location 1003
-run/0: instruction run1001/3
-run/0: {name: "3", value: 3, type: 3, properties: ["3": "boolean", "raw": ]} <- string-equal/100 {name: "x", value: 1, type: 2-5-4, properties: ["x": "address":"array":"character"]}, {name: "y", value: 2, type: 2-5-4, properties: ["y": "address":"array":"character"]}
-mem/0: location 1002 is 1031
-mem/0: location 1003 is 1035
-run/0: instruction string-equal/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1039
-run/0: instruction string-equal/1
-run/0: {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character"]} <- next-ingredient/30 
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1041
-run/0: instruction string-equal/2
-run/0: {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]} <- length/28 {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}
-mem/0: location 1041 is 1031
-mem/0: storing 3 in location 1042
-run/0: instruction string-equal/3
-run/0: {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character"]} <- next-ingredient/30 
-run/0: product 0 is 1035
-mem/0: storing 1035 in location 1043
-run/0: instruction string-equal/4
-run/0: {name: "b-len", value: 4, type: 1, properties: ["b-len": "integer"]} <- length/28 {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}
-mem/0: location 1043 is 1035
-mem/0: storing 3 in location 1044
-run/0: instruction string-equal/6
-run/0: trace/18 {name: "string-equal", value: 0, type: 0, properties: ["string-equal": "literal-string"]}, {name: "comparing lengths", value: 0, type: 0, properties: ["comparing lengths": "literal-string"]}
-string-equal/0: comparing lengths
-run/0: instruction string-equal/7
-run/0: {name: "length-equal?", value: 5, type: 3, properties: ["length-equal?": "boolean"]} <- equal/13 {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]}, {name: "b-len", value: 4, type: 1, properties: ["b-len": "integer"]}
-run/0: ingredient 0 is a-len
-mem/0: location 1042 is 3
-run/0: ingredient 1 is b-len
-mem/0: location 1044 is 3
-run/0: product 0 is 1
-mem/0: storing 1 in location 1045
-run/0: instruction string-equal/8
-run/0: break-if/11 {name: "length-equal?", value: 5, type: 3, properties: ["length-equal?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
-mem/0: location 1045 is 1
-run/0: ingredient 0 is 1
-run/0: ingredient 1 is 
-run/0: jumping to instruction 10
-run/0: instruction string-equal/11
-run/0: trace/18 {name: "string-equal", value: 0, type: 0, properties: ["string-equal": "literal-string"]}, {name: "comparing characters", value: 0, type: 0, properties: ["comparing characters": "literal-string"]}
-string-equal/0: comparing characters
-run/0: instruction string-equal/12
-run/0: {name: "i", value: 6, type: 1, properties: ["i": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
-mem/0: storing 0 in location 1046
-run/0: instruction string-equal/14
-run/0: {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 6, type: 1, properties: ["i": "integer"]}, {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1046 is 0
-run/0: ingredient 1 is a-len
-mem/0: location 1042 is 3
-run/0: product 0 is 0
-mem/0: storing 0 in location 1047
-run/0: instruction string-equal/15
-run/0: break-if/11 {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 9, type: , properties: ["": ]}
-mem/0: location 1047 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction string-equal/16
-run/0: {name: "a2", value: 8, type: 4, properties: ["a2": "character"]} <- index/26 {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}, {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}
-mem/0: location 1041 is 1031
-run/0: ingredient 1 is {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
-mem/0: location 1046 is 0
-run/0: address to copy is 1032
-run/0: its type is 4
-mem/0: location 1032 is 97
-run/0: product 0 is 97
-mem/0: storing 97 in location 1048
-run/0: instruction string-equal/17
-run/0: {name: "b2", value: 9, type: 4, properties: ["b2": "character"]} <- index/26 {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}, {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}
-mem/0: location 1043 is 1035
-run/0: ingredient 1 is {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
-mem/0: location 1046 is 0
-run/0: address to copy is 1036
-run/0: its type is 4
-mem/0: location 1036 is 97
-run/0: product 0 is 97
-mem/0: storing 97 in location 1049
-run/0: instruction string-equal/19
-run/0: {name: "chars-match?", value: 10, type: 3, properties: ["chars-match?": "boolean"]} <- equal/13 {name: "a2", value: 8, type: 4, properties: ["a2": "character"]}, {name: "b2", value: 9, type: 4, properties: ["b2": "character"]}
-run/0: ingredient 0 is a2
-mem/0: location 1048 is 97
-run/0: ingredient 1 is b2
-mem/0: location 1049 is 97
-run/0: product 0 is 1
-mem/0: storing 1 in location 1050
-run/0: instruction string-equal/20
-run/0: break-if/11 {name: "chars-match?", value: 10, type: 3, properties: ["chars-match?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
-mem/0: location 1050 is 1
-run/0: ingredient 0 is 1
-run/0: ingredient 1 is 
-run/0: jumping to instruction 22
-run/0: instruction string-equal/23
-run/0: {name: "i", value: 6, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 6, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1046 is 0
-run/0: ingredient 1 is 1
-run/0: product 0 is 1
-mem/0: storing 1 in location 1046
-run/0: instruction string-equal/24
-run/0: loop/10 {name: "", value: -11, type: , properties: ["": ]}
-run/0: ingredient 0 is -11
-run/0: jumping to instruction 14
-run/0: instruction string-equal/14
-run/0: {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 6, type: 1, properties: ["i": "integer"]}, {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1046 is 1
-run/0: ingredient 1 is a-len
-mem/0: location 1042 is 3
-run/0: product 0 is 0
-mem/0: storing 0 in location 1047
-run/0: instruction string-equal/15
-run/0: break-if/11 {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 9, type: , properties: ["": ]}
-mem/0: location 1047 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction string-equal/16
-run/0: {name: "a2", value: 8, type: 4, properties: ["a2": "character"]} <- index/26 {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}, {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}
-mem/0: location 1041 is 1031
-run/0: ingredient 1 is {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
-mem/0: location 1046 is 1
-run/0: address to copy is 1033
-run/0: its type is 4
-mem/0: location 1033 is 98
-run/0: product 0 is 98
-mem/0: storing 98 in location 1048
-run/0: instruction string-equal/17
-run/0: {name: "b2", value: 9, type: 4, properties: ["b2": "character"]} <- index/26 {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}, {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}
-mem/0: location 1043 is 1035
-run/0: ingredient 1 is {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
-mem/0: location 1046 is 1
-run/0: address to copy is 1037
-run/0: its type is 4
-mem/0: location 1037 is 98
-run/0: product 0 is 98
-mem/0: storing 98 in location 1049
-run/0: instruction string-equal/19
-run/0: {name: "chars-match?", value: 10, type: 3, properties: ["chars-match?": "boolean"]} <- equal/13 {name: "a2", value: 8, type: 4, properties: ["a2": "character"]}, {name: "b2", value: 9, type: 4, properties: ["b2": "character"]}
-run/0: ingredient 0 is a2
-mem/0: location 1048 is 98
-run/0: ingredient 1 is b2
-mem/0: location 1049 is 98
-run/0: product 0 is 1
-mem/0: storing 1 in location 1050
-run/0: instruction string-equal/20
-run/0: break-if/11 {name: "chars-match?", value: 10, type: 3, properties: ["chars-match?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
-mem/0: location 1050 is 1
-run/0: ingredient 0 is 1
-run/0: ingredient 1 is 
-run/0: jumping to instruction 22
-run/0: instruction string-equal/23
-run/0: {name: "i", value: 6, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 6, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1046 is 1
-run/0: ingredient 1 is 1
-run/0: product 0 is 2
-mem/0: storing 2 in location 1046
-run/0: instruction string-equal/24
-run/0: loop/10 {name: "", value: -11, type: , properties: ["": ]}
-run/0: ingredient 0 is -11
-run/0: jumping to instruction 14
-run/0: instruction string-equal/14
-run/0: {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 6, type: 1, properties: ["i": "integer"]}, {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1046 is 2
-run/0: ingredient 1 is a-len
-mem/0: location 1042 is 3
-run/0: product 0 is 0
-mem/0: storing 0 in location 1047
-run/0: instruction string-equal/15
-run/0: break-if/11 {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 9, type: , properties: ["": ]}
-mem/0: location 1047 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction string-equal/16
-run/0: {name: "a2", value: 8, type: 4, properties: ["a2": "character"]} <- index/26 {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}, {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}
-mem/0: location 1041 is 1031
-run/0: ingredient 1 is {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
-mem/0: location 1046 is 2
-run/0: address to copy is 1034
-run/0: its type is 4
-mem/0: location 1034 is 99
-run/0: product 0 is 99
-mem/0: storing 99 in location 1048
-run/0: instruction string-equal/17
-run/0: {name: "b2", value: 9, type: 4, properties: ["b2": "character"]} <- index/26 {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}, {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}
-mem/0: location 1043 is 1035
-run/0: ingredient 1 is {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
-mem/0: location 1046 is 2
-run/0: address to copy is 1038
-run/0: its type is 4
-mem/0: location 1038 is 100
-run/0: product 0 is 100
-mem/0: storing 100 in location 1049
-run/0: instruction string-equal/19
-run/0: {name: "chars-match?", value: 10, type: 3, properties: ["chars-match?": "boolean"]} <- equal/13 {name: "a2", value: 8, type: 4, properties: ["a2": "character"]}, {name: "b2", value: 9, type: 4, properties: ["b2": "character"]}
-run/0: ingredient 0 is a2
-mem/0: location 1048 is 99
-run/0: ingredient 1 is b2
-mem/0: location 1049 is 100
-run/0: product 0 is 0
-mem/0: storing 0 in location 1050
-run/0: instruction string-equal/20
-run/0: break-if/11 {name: "chars-match?", value: 10, type: 3, properties: ["chars-match?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
-mem/0: location 1050 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction string-equal/21
-run/0: reply/33 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: result 0 is 0
-mem/0: storing 0 in location 3
-run/0: instruction string-equal-common-lengths-but-distinct/1
-run/0: memory-should-contain/46 {name: "
-    3 <- 0  # abc != abd
-  ", value: 0, type: 0, properties: ["
-    3 <- 0  # abc != abd
-  ": "literal-string"]}
-run/0: checking location 3
diff --git a/cpp/.traces/string-equal-distinct-lengths b/cpp/.traces/string-equal-distinct-lengths
deleted file mode 100644
index 3a92b204..00000000
--- a/cpp/.traces/string-equal-distinct-lengths
+++ /dev/null
@@ -1,146 +0,0 @@
-parse/0: instruction: run
-parse/0:   ingredient: {name: "
-    default-space:address:array:location <- new location:type, 30:literal
-    x:address:array:character <- new [abc]
-    y:address:array:character <- new [abcd]
-    3:boolean/raw <- string-equal x:address:array:character, y:address:array:character
-  ", value: 0, type: 0, properties: ["
-    default-space:address:array:location <- new location:type, 30:literal
-    x:address:array:character <- new [abc]
-    y:address:array:character <- new [abcd]
-    3:boolean/raw <- string-equal x:address:array:character, y:address:array:character
-  ": "literal-string"]}
-parse/0: instruction: memory-should-contain
-parse/0:   ingredient: {name: "
-    3 <- 0  # abc != abcd
-  ", value: 0, type: 0, properties: ["
-    3 <- 0  # abc != abcd
-  ": "literal-string"]}
-parse/0: instruction: trace-should-contain
-parse/0:   ingredient: {name: "
-    string-equal: comparing lengths
-  ", value: 0, type: 0, properties: ["
-    string-equal: comparing lengths
-  ": "literal-string"]}
-parse/0: instruction: trace-should-not-contain
-parse/0:   ingredient: {name: "
-    string-equal: comparing characters
-  ", value: 0, type: 0, properties: ["
-    string-equal: comparing characters
-  ": "literal-string"]}
-after-brace/0: recipe string-equal-distinct-lengths
-after-brace/0: run ...
-after-brace/0: memory-should-contain ...
-after-brace/0: trace-should-contain ...
-after-brace/0: trace-should-not-contain ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: string-equal-distinct-lengths
-run/0: instruction string-equal-distinct-lengths/0
-run/0: run/45 {name: "
-    default-space:address:array:location <- new location:type, 30:literal
-    x:address:array:character <- new [abc]
-    y:address:array:character <- new [abcd]
-    3:boolean/raw <- string-equal x:address:array:character, y:address:array:character
-  ", value: 0, type: 0, properties: ["
-    default-space:address:array:location <- new location:type, 30:literal
-    x:address:array:character <- new [abc]
-    y:address:array:character <- new [abcd]
-    3:boolean/raw <- string-equal x:address:array:character, y:address:array:character
-  ": "literal-string"]}
-parse/0: instruction: new
-parse/0:   ingredient: {name: "location", value: 0, type: 0, properties: ["location": "type"]}
-parse/0:   ingredient: {name: "30", value: 0, type: 0, properties: ["30": "literal"]}
-parse/0:   product: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]}
-parse/0: instruction: new
-parse/0:   ingredient: {name: "abc", value: 0, type: 0, properties: ["abc": "literal-string"]}
-parse/0:   product: {name: "x", value: 0, type: 2-5-4, properties: ["x": "address":"array":"character"]}
-parse/0: instruction: new
-parse/0:   ingredient: {name: "abcd", value: 0, type: 0, properties: ["abcd": "literal-string"]}
-parse/0:   product: {name: "y", value: 0, type: 2-5-4, properties: ["y": "address":"array":"character"]}
-parse/0: instruction: string-equal
-parse/0:   ingredient: {name: "x", value: 0, type: 2-5-4, properties: ["x": "address":"array":"character"]}
-parse/0:   ingredient: {name: "y", value: 0, type: 2-5-4, properties: ["y": "address":"array":"character"]}
-parse/0:   product: {name: "3", value: 0, type: 3, properties: ["3": "boolean", "raw": ]}
-new/0: location -> 1
-new/0: abc -> 0
-name/0: assign x 1
-new/0: abcd -> 0
-name/0: assign y 2
-after-brace/0: recipe run1001
-after-brace/0: new ...
-after-brace/0: new ...
-after-brace/0: new ...
-after-brace/0: string-equal ...
-run/0: instruction run1001/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1000
-run/0: instruction run1001/1
-run/0: {name: "x", value: 1, type: 2-5-4, properties: ["x": "address":"array":"character"]} <- new/44 {name: "abc", value: 0, type: 0, properties: ["abc": "literal-string"]}
-mem/0: storing 1031 in location 1002
-run/0: instruction run1001/2
-run/0: {name: "y", value: 2, type: 2-5-4, properties: ["y": "address":"array":"character"]} <- new/44 {name: "abcd", value: 0, type: 0, properties: ["abcd": "literal-string"]}
-mem/0: storing 1035 in location 1003
-run/0: instruction run1001/3
-run/0: {name: "3", value: 3, type: 3, properties: ["3": "boolean", "raw": ]} <- string-equal/100 {name: "x", value: 1, type: 2-5-4, properties: ["x": "address":"array":"character"]}, {name: "y", value: 2, type: 2-5-4, properties: ["y": "address":"array":"character"]}
-mem/0: location 1002 is 1031
-mem/0: location 1003 is 1035
-run/0: instruction string-equal/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1040
-run/0: instruction string-equal/1
-run/0: {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character"]} <- next-ingredient/30 
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1042
-run/0: instruction string-equal/2
-run/0: {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]} <- length/28 {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}
-mem/0: location 1042 is 1031
-mem/0: storing 3 in location 1043
-run/0: instruction string-equal/3
-run/0: {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character"]} <- next-ingredient/30 
-run/0: product 0 is 1035
-mem/0: storing 1035 in location 1044
-run/0: instruction string-equal/4
-run/0: {name: "b-len", value: 4, type: 1, properties: ["b-len": "integer"]} <- length/28 {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}
-mem/0: location 1044 is 1035
-mem/0: storing 4 in location 1045
-run/0: instruction string-equal/6
-run/0: trace/18 {name: "string-equal", value: 0, type: 0, properties: ["string-equal": "literal-string"]}, {name: "comparing lengths", value: 0, type: 0, properties: ["comparing lengths": "literal-string"]}
-string-equal/0: comparing lengths
-run/0: instruction string-equal/7
-run/0: {name: "length-equal?", value: 5, type: 3, properties: ["length-equal?": "boolean"]} <- equal/13 {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]}, {name: "b-len", value: 4, type: 1, properties: ["b-len": "integer"]}
-run/0: ingredient 0 is a-len
-mem/0: location 1043 is 3
-run/0: ingredient 1 is b-len
-mem/0: location 1045 is 4
-run/0: product 0 is 0
-mem/0: storing 0 in location 1046
-run/0: instruction string-equal/8
-run/0: break-if/11 {name: "length-equal?", value: 5, type: 3, properties: ["length-equal?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
-mem/0: location 1046 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction string-equal/9
-run/0: reply/33 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: result 0 is 0
-mem/0: storing 0 in location 3
-run/0: instruction string-equal-distinct-lengths/1
-run/0: memory-should-contain/46 {name: "
-    3 <- 0  # abc != abcd
-  ", value: 0, type: 0, properties: ["
-    3 <- 0  # abc != abcd
-  ": "literal-string"]}
-run/0: checking location 3
-run/0: instruction string-equal-distinct-lengths/2
-run/0: trace-should-contain/47 {name: "
-    string-equal: comparing lengths
-  ", value: 0, type: 0, properties: ["
-    string-equal: comparing lengths
-  ": "literal-string"]}
-run/0: instruction string-equal-distinct-lengths/3
-run/0: trace-should-not-contain/48 {name: "
-    string-equal: comparing characters
-  ", value: 0, type: 0, properties: ["
-    string-equal: comparing characters
-  ": "literal-string"]}
diff --git a/cpp/.traces/string-equal-identical b/cpp/.traces/string-equal-identical
deleted file mode 100644
index 53d32465..00000000
--- a/cpp/.traces/string-equal-identical
+++ /dev/null
@@ -1,322 +0,0 @@
-parse/0: instruction: run
-parse/0:   ingredient: {name: "
-    default-space:address:array:location <- new location:type, 30:literal
-    x:address:array:character <- new [abc]
-    y:address:array:character <- new [abc]
-    3:boolean/raw <- string-equal x:address:array:character, y:address:array:character
-  ", value: 0, type: 0, properties: ["
-    default-space:address:array:location <- new location:type, 30:literal
-    x:address:array:character <- new [abc]
-    y:address:array:character <- new [abc]
-    3:boolean/raw <- string-equal x:address:array:character, y:address:array:character
-  ": "literal-string"]}
-parse/0: instruction: memory-should-contain
-parse/0:   ingredient: {name: "
-    3 <- 1  # abc == abc
-  ", value: 0, type: 0, properties: ["
-    3 <- 1  # abc == abc
-  ": "literal-string"]}
-after-brace/0: recipe string-equal-identical
-after-brace/0: run ...
-after-brace/0: memory-should-contain ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: string-equal-identical
-run/0: instruction string-equal-identical/0
-run/0: run/45 {name: "
-    default-space:address:array:location <- new location:type, 30:literal
-    x:address:array:character <- new [abc]
-    y:address:array:character <- new [abc]
-    3:boolean/raw <- string-equal x:address:array:character, y:address:array:character
-  ", value: 0, type: 0, properties: ["
-    default-space:address:array:location <- new location:type, 30:literal
-    x:address:array:character <- new [abc]
-    y:address:array:character <- new [abc]
-    3:boolean/raw <- string-equal x:address:array:character, y:address:array:character
-  ": "literal-string"]}
-parse/0: instruction: new
-parse/0:   ingredient: {name: "location", value: 0, type: 0, properties: ["location": "type"]}
-parse/0:   ingredient: {name: "30", value: 0, type: 0, properties: ["30": "literal"]}
-parse/0:   product: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]}
-parse/0: instruction: new
-parse/0:   ingredient: {name: "abc", value: 0, type: 0, properties: ["abc": "literal-string"]}
-parse/0:   product: {name: "x", value: 0, type: 2-5-4, properties: ["x": "address":"array":"character"]}
-parse/0: instruction: new
-parse/0:   ingredient: {name: "abc", value: 0, type: 0, properties: ["abc": "literal-string"]}
-parse/0:   product: {name: "y", value: 0, type: 2-5-4, properties: ["y": "address":"array":"character"]}
-parse/0: instruction: string-equal
-parse/0:   ingredient: {name: "x", value: 0, type: 2-5-4, properties: ["x": "address":"array":"character"]}
-parse/0:   ingredient: {name: "y", value: 0, type: 2-5-4, properties: ["y": "address":"array":"character"]}
-parse/0:   product: {name: "3", value: 0, type: 3, properties: ["3": "boolean", "raw": ]}
-new/0: location -> 1
-new/0: abc -> 0
-name/0: assign x 1
-new/0: abc -> 0
-name/0: assign y 2
-after-brace/0: recipe run1001
-after-brace/0: new ...
-after-brace/0: new ...
-after-brace/0: new ...
-after-brace/0: string-equal ...
-run/0: instruction run1001/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1000
-run/0: instruction run1001/1
-run/0: {name: "x", value: 1, type: 2-5-4, properties: ["x": "address":"array":"character"]} <- new/44 {name: "abc", value: 0, type: 0, properties: ["abc": "literal-string"]}
-mem/0: storing 1031 in location 1002
-run/0: instruction run1001/2
-run/0: {name: "y", value: 2, type: 2-5-4, properties: ["y": "address":"array":"character"]} <- new/44 {name: "abc", value: 0, type: 0, properties: ["abc": "literal-string"]}
-mem/0: storing 1035 in location 1003
-run/0: instruction run1001/3
-run/0: {name: "3", value: 3, type: 3, properties: ["3": "boolean", "raw": ]} <- string-equal/100 {name: "x", value: 1, type: 2-5-4, properties: ["x": "address":"array":"character"]}, {name: "y", value: 2, type: 2-5-4, properties: ["y": "address":"array":"character"]}
-mem/0: location 1002 is 1031
-mem/0: location 1003 is 1035
-run/0: instruction string-equal/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1039
-run/0: instruction string-equal/1
-run/0: {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character"]} <- next-ingredient/30 
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1041
-run/0: instruction string-equal/2
-run/0: {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]} <- length/28 {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}
-mem/0: location 1041 is 1031
-mem/0: storing 3 in location 1042
-run/0: instruction string-equal/3
-run/0: {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character"]} <- next-ingredient/30 
-run/0: product 0 is 1035
-mem/0: storing 1035 in location 1043
-run/0: instruction string-equal/4
-run/0: {name: "b-len", value: 4, type: 1, properties: ["b-len": "integer"]} <- length/28 {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}
-mem/0: location 1043 is 1035
-mem/0: storing 3 in location 1044
-run/0: instruction string-equal/6
-run/0: trace/18 {name: "string-equal", value: 0, type: 0, properties: ["string-equal": "literal-string"]}, {name: "comparing lengths", value: 0, type: 0, properties: ["comparing lengths": "literal-string"]}
-string-equal/0: comparing lengths
-run/0: instruction string-equal/7
-run/0: {name: "length-equal?", value: 5, type: 3, properties: ["length-equal?": "boolean"]} <- equal/13 {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]}, {name: "b-len", value: 4, type: 1, properties: ["b-len": "integer"]}
-run/0: ingredient 0 is a-len
-mem/0: location 1042 is 3
-run/0: ingredient 1 is b-len
-mem/0: location 1044 is 3
-run/0: product 0 is 1
-mem/0: storing 1 in location 1045
-run/0: instruction string-equal/8
-run/0: break-if/11 {name: "length-equal?", value: 5, type: 3, properties: ["length-equal?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
-mem/0: location 1045 is 1
-run/0: ingredient 0 is 1
-run/0: ingredient 1 is 
-run/0: jumping to instruction 10
-run/0: instruction string-equal/11
-run/0: trace/18 {name: "string-equal", value: 0, type: 0, properties: ["string-equal": "literal-string"]}, {name: "comparing characters", value: 0, type: 0, properties: ["comparing characters": "literal-string"]}
-string-equal/0: comparing characters
-run/0: instruction string-equal/12
-run/0: {name: "i", value: 6, type: 1, properties: ["i": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
-mem/0: storing 0 in location 1046
-run/0: instruction string-equal/14
-run/0: {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 6, type: 1, properties: ["i": "integer"]}, {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1046 is 0
-run/0: ingredient 1 is a-len
-mem/0: location 1042 is 3
-run/0: product 0 is 0
-mem/0: storing 0 in location 1047
-run/0: instruction string-equal/15
-run/0: break-if/11 {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 9, type: , properties: ["": ]}
-mem/0: location 1047 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction string-equal/16
-run/0: {name: "a2", value: 8, type: 4, properties: ["a2": "character"]} <- index/26 {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}, {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}
-mem/0: location 1041 is 1031
-run/0: ingredient 1 is {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
-mem/0: location 1046 is 0
-run/0: address to copy is 1032
-run/0: its type is 4
-mem/0: location 1032 is 97
-run/0: product 0 is 97
-mem/0: storing 97 in location 1048
-run/0: instruction string-equal/17
-run/0: {name: "b2", value: 9, type: 4, properties: ["b2": "character"]} <- index/26 {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}, {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}
-mem/0: location 1043 is 1035
-run/0: ingredient 1 is {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
-mem/0: location 1046 is 0
-run/0: address to copy is 1036
-run/0: its type is 4
-mem/0: location 1036 is 97
-run/0: product 0 is 97
-mem/0: storing 97 in location 1049
-run/0: instruction string-equal/19
-run/0: {name: "chars-match?", value: 10, type: 3, properties: ["chars-match?": "boolean"]} <- equal/13 {name: "a2", value: 8, type: 4, properties: ["a2": "character"]}, {name: "b2", value: 9, type: 4, properties: ["b2": "character"]}
-run/0: ingredient 0 is a2
-mem/0: location 1048 is 97
-run/0: ingredient 1 is b2
-mem/0: location 1049 is 97
-run/0: product 0 is 1
-mem/0: storing 1 in location 1050
-run/0: instruction string-equal/20
-run/0: break-if/11 {name: "chars-match?", value: 10, type: 3, properties: ["chars-match?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
-mem/0: location 1050 is 1
-run/0: ingredient 0 is 1
-run/0: ingredient 1 is 
-run/0: jumping to instruction 22
-run/0: instruction string-equal/23
-run/0: {name: "i", value: 6, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 6, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1046 is 0
-run/0: ingredient 1 is 1
-run/0: product 0 is 1
-mem/0: storing 1 in location 1046
-run/0: instruction string-equal/24
-run/0: loop/10 {name: "", value: -11, type: , properties: ["": ]}
-run/0: ingredient 0 is -11
-run/0: jumping to instruction 14
-run/0: instruction string-equal/14
-run/0: {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 6, type: 1, properties: ["i": "integer"]}, {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1046 is 1
-run/0: ingredient 1 is a-len
-mem/0: location 1042 is 3
-run/0: product 0 is 0
-mem/0: storing 0 in location 1047
-run/0: instruction string-equal/15
-run/0: break-if/11 {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 9, type: , properties: ["": ]}
-mem/0: location 1047 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction string-equal/16
-run/0: {name: "a2", value: 8, type: 4, properties: ["a2": "character"]} <- index/26 {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}, {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}
-mem/0: location 1041 is 1031
-run/0: ingredient 1 is {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
-mem/0: location 1046 is 1
-run/0: address to copy is 1033
-run/0: its type is 4
-mem/0: location 1033 is 98
-run/0: product 0 is 98
-mem/0: storing 98 in location 1048
-run/0: instruction string-equal/17
-run/0: {name: "b2", value: 9, type: 4, properties: ["b2": "character"]} <- index/26 {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}, {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}
-mem/0: location 1043 is 1035
-run/0: ingredient 1 is {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
-mem/0: location 1046 is 1
-run/0: address to copy is 1037
-run/0: its type is 4
-mem/0: location 1037 is 98
-run/0: product 0 is 98
-mem/0: storing 98 in location 1049
-run/0: instruction string-equal/19
-run/0: {name: "chars-match?", value: 10, type: 3, properties: ["chars-match?": "boolean"]} <- equal/13 {name: "a2", value: 8, type: 4, properties: ["a2": "character"]}, {name: "b2", value: 9, type: 4, properties: ["b2": "character"]}
-run/0: ingredient 0 is a2
-mem/0: location 1048 is 98
-run/0: ingredient 1 is b2
-mem/0: location 1049 is 98
-run/0: product 0 is 1
-mem/0: storing 1 in location 1050
-run/0: instruction string-equal/20
-run/0: break-if/11 {name: "chars-match?", value: 10, type: 3, properties: ["chars-match?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
-mem/0: location 1050 is 1
-run/0: ingredient 0 is 1
-run/0: ingredient 1 is 
-run/0: jumping to instruction 22
-run/0: instruction string-equal/23
-run/0: {name: "i", value: 6, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 6, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1046 is 1
-run/0: ingredient 1 is 1
-run/0: product 0 is 2
-mem/0: storing 2 in location 1046
-run/0: instruction string-equal/24
-run/0: loop/10 {name: "", value: -11, type: , properties: ["": ]}
-run/0: ingredient 0 is -11
-run/0: jumping to instruction 14
-run/0: instruction string-equal/14
-run/0: {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 6, type: 1, properties: ["i": "integer"]}, {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1046 is 2
-run/0: ingredient 1 is a-len
-mem/0: location 1042 is 3
-run/0: product 0 is 0
-mem/0: storing 0 in location 1047
-run/0: instruction string-equal/15
-run/0: break-if/11 {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 9, type: , properties: ["": ]}
-mem/0: location 1047 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction string-equal/16
-run/0: {name: "a2", value: 8, type: 4, properties: ["a2": "character"]} <- index/26 {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}, {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}
-mem/0: location 1041 is 1031
-run/0: ingredient 1 is {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
-mem/0: location 1046 is 2
-run/0: address to copy is 1034
-run/0: its type is 4
-mem/0: location 1034 is 99
-run/0: product 0 is 99
-mem/0: storing 99 in location 1048
-run/0: instruction string-equal/17
-run/0: {name: "b2", value: 9, type: 4, properties: ["b2": "character"]} <- index/26 {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}, {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}
-mem/0: location 1043 is 1035
-run/0: ingredient 1 is {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
-mem/0: location 1046 is 2
-run/0: address to copy is 1038
-run/0: its type is 4
-mem/0: location 1038 is 99
-run/0: product 0 is 99
-mem/0: storing 99 in location 1049
-run/0: instruction string-equal/19
-run/0: {name: "chars-match?", value: 10, type: 3, properties: ["chars-match?": "boolean"]} <- equal/13 {name: "a2", value: 8, type: 4, properties: ["a2": "character"]}, {name: "b2", value: 9, type: 4, properties: ["b2": "character"]}
-run/0: ingredient 0 is a2
-mem/0: location 1048 is 99
-run/0: ingredient 1 is b2
-mem/0: location 1049 is 99
-run/0: product 0 is 1
-mem/0: storing 1 in location 1050
-run/0: instruction string-equal/20
-run/0: break-if/11 {name: "chars-match?", value: 10, type: 3, properties: ["chars-match?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
-mem/0: location 1050 is 1
-run/0: ingredient 0 is 1
-run/0: ingredient 1 is 
-run/0: jumping to instruction 22
-run/0: instruction string-equal/23
-run/0: {name: "i", value: 6, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 6, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1046 is 2
-run/0: ingredient 1 is 1
-run/0: product 0 is 3
-mem/0: storing 3 in location 1046
-run/0: instruction string-equal/24
-run/0: loop/10 {name: "", value: -11, type: , properties: ["": ]}
-run/0: ingredient 0 is -11
-run/0: jumping to instruction 14
-run/0: instruction string-equal/14
-run/0: {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 6, type: 1, properties: ["i": "integer"]}, {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1046 is 3
-run/0: ingredient 1 is a-len
-mem/0: location 1042 is 3
-run/0: product 0 is 1
-mem/0: storing 1 in location 1047
-run/0: instruction string-equal/15
-run/0: break-if/11 {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 9, type: , properties: ["": ]}
-mem/0: location 1047 is 1
-run/0: ingredient 0 is 1
-run/0: ingredient 1 is 
-run/0: jumping to instruction 25
-run/0: instruction string-equal/26
-run/0: reply/33 {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: result 0 is 1
-mem/0: storing 1 in location 3
-run/0: instruction string-equal-identical/1
-run/0: memory-should-contain/46 {name: "
-    3 <- 1  # abc == abc
-  ", value: 0, type: 0, properties: ["
-    3 <- 1  # abc == abc
-  ": "literal-string"]}
-run/0: checking location 3
diff --git a/cpp/.traces/string-equal-reflexive b/cpp/.traces/string-equal-reflexive
deleted file mode 100644
index f7127192..00000000
--- a/cpp/.traces/string-equal-reflexive
+++ /dev/null
@@ -1,309 +0,0 @@
-parse/0: instruction: run
-parse/0:   ingredient: {name: "
-    default-space:address:array:location <- new location:type, 30:literal
-    x:address:array:character <- new [abc]
-    3:boolean/raw <- string-equal x:address:array:character, x:address:array:character
-  ", value: 0, type: 0, properties: ["
-    default-space:address:array:location <- new location:type, 30:literal
-    x:address:array:character <- new [abc]
-    3:boolean/raw <- string-equal x:address:array:character, x:address:array:character
-  ": "literal-string"]}
-parse/0: instruction: memory-should-contain
-parse/0:   ingredient: {name: "
-    3 <- 1  # x == x for all x
-  ", value: 0, type: 0, properties: ["
-    3 <- 1  # x == x for all x
-  ": "literal-string"]}
-after-brace/0: recipe string-equal-reflexive
-after-brace/0: run ...
-after-brace/0: memory-should-contain ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: string-equal-reflexive
-run/0: instruction string-equal-reflexive/0
-run/0: run/45 {name: "
-    default-space:address:array:location <- new location:type, 30:literal
-    x:address:array:character <- new [abc]
-    3:boolean/raw <- string-equal x:address:array:character, x:address:array:character
-  ", value: 0, type: 0, properties: ["
-    default-space:address:array:location <- new location:type, 30:literal
-    x:address:array:character <- new [abc]
-    3:boolean/raw <- string-equal x:address:array:character, x:address:array:character
-  ": "literal-string"]}
-parse/0: instruction: new
-parse/0:   ingredient: {name: "location", value: 0, type: 0, properties: ["location": "type"]}
-parse/0:   ingredient: {name: "30", value: 0, type: 0, properties: ["30": "literal"]}
-parse/0:   product: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]}
-parse/0: instruction: new
-parse/0:   ingredient: {name: "abc", value: 0, type: 0, properties: ["abc": "literal-string"]}
-parse/0:   product: {name: "x", value: 0, type: 2-5-4, properties: ["x": "address":"array":"character"]}
-parse/0: instruction: string-equal
-parse/0:   ingredient: {name: "x", value: 0, type: 2-5-4, properties: ["x": "address":"array":"character"]}
-parse/0:   ingredient: {name: "x", value: 0, type: 2-5-4, properties: ["x": "address":"array":"character"]}
-parse/0:   product: {name: "3", value: 0, type: 3, properties: ["3": "boolean", "raw": ]}
-new/0: location -> 1
-new/0: abc -> 0
-name/0: assign x 1
-after-brace/0: recipe run1001
-after-brace/0: new ...
-after-brace/0: new ...
-after-brace/0: string-equal ...
-run/0: instruction run1001/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1000
-run/0: instruction run1001/1
-run/0: {name: "x", value: 1, type: 2-5-4, properties: ["x": "address":"array":"character"]} <- new/44 {name: "abc", value: 0, type: 0, properties: ["abc": "literal-string"]}
-mem/0: storing 1031 in location 1002
-run/0: instruction run1001/2
-run/0: {name: "3", value: 3, type: 3, properties: ["3": "boolean", "raw": ]} <- string-equal/100 {name: "x", value: 1, type: 2-5-4, properties: ["x": "address":"array":"character"]}, {name: "x", value: 1, type: 2-5-4, properties: ["x": "address":"array":"character"]}
-mem/0: location 1002 is 1031
-mem/0: location 1002 is 1031
-run/0: instruction string-equal/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1035
-run/0: instruction string-equal/1
-run/0: {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character"]} <- next-ingredient/30 
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1037
-run/0: instruction string-equal/2
-run/0: {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]} <- length/28 {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}
-mem/0: location 1037 is 1031
-mem/0: storing 3 in location 1038
-run/0: instruction string-equal/3
-run/0: {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character"]} <- next-ingredient/30 
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1039
-run/0: instruction string-equal/4
-run/0: {name: "b-len", value: 4, type: 1, properties: ["b-len": "integer"]} <- length/28 {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}
-mem/0: location 1039 is 1031
-mem/0: storing 3 in location 1040
-run/0: instruction string-equal/6
-run/0: trace/18 {name: "string-equal", value: 0, type: 0, properties: ["string-equal": "literal-string"]}, {name: "comparing lengths", value: 0, type: 0, properties: ["comparing lengths": "literal-string"]}
-string-equal/0: comparing lengths
-run/0: instruction string-equal/7
-run/0: {name: "length-equal?", value: 5, type: 3, properties: ["length-equal?": "boolean"]} <- equal/13 {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]}, {name: "b-len", value: 4, type: 1, properties: ["b-len": "integer"]}
-run/0: ingredient 0 is a-len
-mem/0: location 1038 is 3
-run/0: ingredient 1 is b-len
-mem/0: location 1040 is 3
-run/0: product 0 is 1
-mem/0: storing 1 in location 1041
-run/0: instruction string-equal/8
-run/0: break-if/11 {name: "length-equal?", value: 5, type: 3, properties: ["length-equal?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
-mem/0: location 1041 is 1
-run/0: ingredient 0 is 1
-run/0: ingredient 1 is 
-run/0: jumping to instruction 10
-run/0: instruction string-equal/11
-run/0: trace/18 {name: "string-equal", value: 0, type: 0, properties: ["string-equal": "literal-string"]}, {name: "comparing characters", value: 0, type: 0, properties: ["comparing characters": "literal-string"]}
-string-equal/0: comparing characters
-run/0: instruction string-equal/12
-run/0: {name: "i", value: 6, type: 1, properties: ["i": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
-mem/0: storing 0 in location 1042
-run/0: instruction string-equal/14
-run/0: {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 6, type: 1, properties: ["i": "integer"]}, {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1042 is 0
-run/0: ingredient 1 is a-len
-mem/0: location 1038 is 3
-run/0: product 0 is 0
-mem/0: storing 0 in location 1043
-run/0: instruction string-equal/15
-run/0: break-if/11 {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 9, type: , properties: ["": ]}
-mem/0: location 1043 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction string-equal/16
-run/0: {name: "a2", value: 8, type: 4, properties: ["a2": "character"]} <- index/26 {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}, {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}
-mem/0: location 1037 is 1031
-run/0: ingredient 1 is {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
-mem/0: location 1042 is 0
-run/0: address to copy is 1032
-run/0: its type is 4
-mem/0: location 1032 is 97
-run/0: product 0 is 97
-mem/0: storing 97 in location 1044
-run/0: instruction string-equal/17
-run/0: {name: "b2", value: 9, type: 4, properties: ["b2": "character"]} <- index/26 {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}, {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}
-mem/0: location 1039 is 1031
-run/0: ingredient 1 is {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
-mem/0: location 1042 is 0
-run/0: address to copy is 1032
-run/0: its type is 4
-mem/0: location 1032 is 97
-run/0: product 0 is 97
-mem/0: storing 97 in location 1045
-run/0: instruction string-equal/19
-run/0: {name: "chars-match?", value: 10, type: 3, properties: ["chars-match?": "boolean"]} <- equal/13 {name: "a2", value: 8, type: 4, properties: ["a2": "character"]}, {name: "b2", value: 9, type: 4, properties: ["b2": "character"]}
-run/0: ingredient 0 is a2
-mem/0: location 1044 is 97
-run/0: ingredient 1 is b2
-mem/0: location 1045 is 97
-run/0: product 0 is 1
-mem/0: storing 1 in location 1046
-run/0: instruction string-equal/20
-run/0: break-if/11 {name: "chars-match?", value: 10, type: 3, properties: ["chars-match?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
-mem/0: location 1046 is 1
-run/0: ingredient 0 is 1
-run/0: ingredient 1 is 
-run/0: jumping to instruction 22
-run/0: instruction string-equal/23
-run/0: {name: "i", value: 6, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 6, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1042 is 0
-run/0: ingredient 1 is 1
-run/0: product 0 is 1
-mem/0: storing 1 in location 1042
-run/0: instruction string-equal/24
-run/0: loop/10 {name: "", value: -11, type: , properties: ["": ]}
-run/0: ingredient 0 is -11
-run/0: jumping to instruction 14
-run/0: instruction string-equal/14
-run/0: {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 6, type: 1, properties: ["i": "integer"]}, {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1042 is 1
-run/0: ingredient 1 is a-len
-mem/0: location 1038 is 3
-run/0: product 0 is 0
-mem/0: storing 0 in location 1043
-run/0: instruction string-equal/15
-run/0: break-if/11 {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 9, type: , properties: ["": ]}
-mem/0: location 1043 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction string-equal/16
-run/0: {name: "a2", value: 8, type: 4, properties: ["a2": "character"]} <- index/26 {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}, {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}
-mem/0: location 1037 is 1031
-run/0: ingredient 1 is {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
-mem/0: location 1042 is 1
-run/0: address to copy is 1033
-run/0: its type is 4
-mem/0: location 1033 is 98
-run/0: product 0 is 98
-mem/0: storing 98 in location 1044
-run/0: instruction string-equal/17
-run/0: {name: "b2", value: 9, type: 4, properties: ["b2": "character"]} <- index/26 {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}, {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}
-mem/0: location 1039 is 1031
-run/0: ingredient 1 is {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
-mem/0: location 1042 is 1
-run/0: address to copy is 1033
-run/0: its type is 4
-mem/0: location 1033 is 98
-run/0: product 0 is 98
-mem/0: storing 98 in location 1045
-run/0: instruction string-equal/19
-run/0: {name: "chars-match?", value: 10, type: 3, properties: ["chars-match?": "boolean"]} <- equal/13 {name: "a2", value: 8, type: 4, properties: ["a2": "character"]}, {name: "b2", value: 9, type: 4, properties: ["b2": "character"]}
-run/0: ingredient 0 is a2
-mem/0: location 1044 is 98
-run/0: ingredient 1 is b2
-mem/0: location 1045 is 98
-run/0: product 0 is 1
-mem/0: storing 1 in location 1046
-run/0: instruction string-equal/20
-run/0: break-if/11 {name: "chars-match?", value: 10, type: 3, properties: ["chars-match?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
-mem/0: location 1046 is 1
-run/0: ingredient 0 is 1
-run/0: ingredient 1 is 
-run/0: jumping to instruction 22
-run/0: instruction string-equal/23
-run/0: {name: "i", value: 6, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 6, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1042 is 1
-run/0: ingredient 1 is 1
-run/0: product 0 is 2
-mem/0: storing 2 in location 1042
-run/0: instruction string-equal/24
-run/0: loop/10 {name: "", value: -11, type: , properties: ["": ]}
-run/0: ingredient 0 is -11
-run/0: jumping to instruction 14
-run/0: instruction string-equal/14
-run/0: {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 6, type: 1, properties: ["i": "integer"]}, {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1042 is 2
-run/0: ingredient 1 is a-len
-mem/0: location 1038 is 3
-run/0: product 0 is 0
-mem/0: storing 0 in location 1043
-run/0: instruction string-equal/15
-run/0: break-if/11 {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 9, type: , properties: ["": ]}
-mem/0: location 1043 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction string-equal/16
-run/0: {name: "a2", value: 8, type: 4, properties: ["a2": "character"]} <- index/26 {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}, {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}
-mem/0: location 1037 is 1031
-run/0: ingredient 1 is {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
-mem/0: location 1042 is 2
-run/0: address to copy is 1034
-run/0: its type is 4
-mem/0: location 1034 is 99
-run/0: product 0 is 99
-mem/0: storing 99 in location 1044
-run/0: instruction string-equal/17
-run/0: {name: "b2", value: 9, type: 4, properties: ["b2": "character"]} <- index/26 {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}, {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
-run/0: ingredient 0 is {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}
-mem/0: location 1039 is 1031
-run/0: ingredient 1 is {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
-mem/0: location 1042 is 2
-run/0: address to copy is 1034
-run/0: its type is 4
-mem/0: location 1034 is 99
-run/0: product 0 is 99
-mem/0: storing 99 in location 1045
-run/0: instruction string-equal/19
-run/0: {name: "chars-match?", value: 10, type: 3, properties: ["chars-match?": "boolean"]} <- equal/13 {name: "a2", value: 8, type: 4, properties: ["a2": "character"]}, {name: "b2", value: 9, type: 4, properties: ["b2": "character"]}
-run/0: ingredient 0 is a2
-mem/0: location 1044 is 99
-run/0: ingredient 1 is b2
-mem/0: location 1045 is 99
-run/0: product 0 is 1
-mem/0: storing 1 in location 1046
-run/0: instruction string-equal/20
-run/0: break-if/11 {name: "chars-match?", value: 10, type: 3, properties: ["chars-match?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
-mem/0: location 1046 is 1
-run/0: ingredient 0 is 1
-run/0: ingredient 1 is 
-run/0: jumping to instruction 22
-run/0: instruction string-equal/23
-run/0: {name: "i", value: 6, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 6, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: ingredient 0 is i
-mem/0: location 1042 is 2
-run/0: ingredient 1 is 1
-run/0: product 0 is 3
-mem/0: storing 3 in location 1042
-run/0: instruction string-equal/24
-run/0: loop/10 {name: "", value: -11, type: , properties: ["": ]}
-run/0: ingredient 0 is -11
-run/0: jumping to instruction 14
-run/0: instruction string-equal/14
-run/0: {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 6, type: 1, properties: ["i": "integer"]}, {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]}
-run/0: ingredient 0 is i
-mem/0: location 1042 is 3
-run/0: ingredient 1 is a-len
-mem/0: location 1038 is 3
-run/0: product 0 is 1
-mem/0: storing 1 in location 1043
-run/0: instruction string-equal/15
-run/0: break-if/11 {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 9, type: , properties: ["": ]}
-mem/0: location 1043 is 1
-run/0: ingredient 0 is 1
-run/0: ingredient 1 is 
-run/0: jumping to instruction 25
-run/0: instruction string-equal/26
-run/0: reply/33 {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
-run/0: result 0 is 1
-mem/0: storing 1 in location 3
-run/0: instruction string-equal-reflexive/1
-run/0: memory-should-contain/46 {name: "
-    3 <- 1  # x == x for all x
-  ", value: 0, type: 0, properties: ["
-    3 <- 1  # x == x for all x
-  ": "literal-string"]}
-run/0: checking location 3
diff --git a/cpp/.traces/string-equal-with-empty b/cpp/.traces/string-equal-with-empty
deleted file mode 100644
index 71fb6770..00000000
--- a/cpp/.traces/string-equal-with-empty
+++ /dev/null
@@ -1,120 +0,0 @@
-parse/0: instruction: run
-parse/0:   ingredient: {name: "
-    default-space:address:array:location <- new location:type, 30:literal
-    x:address:array:character <- new []
-    y:address:array:character <- new [abcd]
-    3:boolean/raw <- string-equal x:address:array:character, y:address:array:character
-  ", value: 0, type: 0, properties: ["
-    default-space:address:array:location <- new location:type, 30:literal
-    x:address:array:character <- new []
-    y:address:array:character <- new [abcd]
-    3:boolean/raw <- string-equal x:address:array:character, y:address:array:character
-  ": "literal-string"]}
-parse/0: instruction: memory-should-contain
-parse/0:   ingredient: {name: "
-    3 <- 0  # "" != abcd
-  ", value: 0, type: 0, properties: ["
-    3 <- 0  # "" != abcd
-  ": "literal-string"]}
-after-brace/0: recipe string-equal-with-empty
-after-brace/0: run ...
-after-brace/0: memory-should-contain ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: string-equal-with-empty
-run/0: instruction string-equal-with-empty/0
-run/0: run/45 {name: "
-    default-space:address:array:location <- new location:type, 30:literal
-    x:address:array:character <- new []
-    y:address:array:character <- new [abcd]
-    3:boolean/raw <- string-equal x:address:array:character, y:address:array:character
-  ", value: 0, type: 0, properties: ["
-    default-space:address:array:location <- new location:type, 30:literal
-    x:address:array:character <- new []
-    y:address:array:character <- new [abcd]
-    3:boolean/raw <- string-equal x:address:array:character, y:address:array:character
-  ": "literal-string"]}
-parse/0: instruction: new
-parse/0:   ingredient: {name: "location", value: 0, type: 0, properties: ["location": "type"]}
-parse/0:   ingredient: {name: "30", value: 0, type: 0, properties: ["30": "literal"]}
-parse/0:   product: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]}
-parse/0: instruction: new
-parse/0:   ingredient: {name: "", value: 0, type: 0, properties: ["": "literal-string"]}
-parse/0:   product: {name: "x", value: 0, type: 2-5-4, properties: ["x": "address":"array":"character"]}
-parse/0: instruction: new
-parse/0:   ingredient: {name: "abcd", value: 0, type: 0, properties: ["abcd": "literal-string"]}
-parse/0:   product: {name: "y", value: 0, type: 2-5-4, properties: ["y": "address":"array":"character"]}
-parse/0: instruction: string-equal
-parse/0:   ingredient: {name: "x", value: 0, type: 2-5-4, properties: ["x": "address":"array":"character"]}
-parse/0:   ingredient: {name: "y", value: 0, type: 2-5-4, properties: ["y": "address":"array":"character"]}
-parse/0:   product: {name: "3", value: 0, type: 3, properties: ["3": "boolean", "raw": ]}
-new/0: location -> 1
-new/0:  -> 0
-name/0: assign x 1
-new/0: abcd -> 0
-name/0: assign y 2
-after-brace/0: recipe run1001
-after-brace/0: new ...
-after-brace/0: new ...
-after-brace/0: new ...
-after-brace/0: string-equal ...
-run/0: instruction run1001/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1000
-run/0: instruction run1001/1
-run/0: {name: "x", value: 1, type: 2-5-4, properties: ["x": "address":"array":"character"]} <- new/44 {name: "", value: 0, type: 0, properties: ["": "literal-string"]}
-mem/0: storing 1031 in location 1002
-run/0: instruction run1001/2
-run/0: {name: "y", value: 2, type: 2-5-4, properties: ["y": "address":"array":"character"]} <- new/44 {name: "abcd", value: 0, type: 0, properties: ["abcd": "literal-string"]}
-mem/0: storing 1032 in location 1003
-run/0: instruction run1001/3
-run/0: {name: "3", value: 3, type: 3, properties: ["3": "boolean", "raw": ]} <- string-equal/100 {name: "x", value: 1, type: 2-5-4, properties: ["x": "address":"array":"character"]}, {name: "y", value: 2, type: 2-5-4, properties: ["y": "address":"array":"character"]}
-mem/0: location 1002 is 1031
-mem/0: location 1003 is 1032
-run/0: instruction string-equal/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/44 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
-mem/0: array size is 30
-mem/0: new alloc: 1037
-run/0: instruction string-equal/1
-run/0: {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character"]} <- next-ingredient/30 
-run/0: product 0 is 1031
-mem/0: storing 1031 in location 1039
-run/0: instruction string-equal/2
-run/0: {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]} <- length/28 {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}
-mem/0: location 1039 is 1031
-mem/0: storing 0 in location 1040
-run/0: instruction string-equal/3
-run/0: {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character"]} <- next-ingredient/30 
-run/0: product 0 is 1032
-mem/0: storing 1032 in location 1041
-run/0: instruction string-equal/4
-run/0: {name: "b-len", value: 4, type: 1, properties: ["b-len": "integer"]} <- length/28 {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}
-mem/0: location 1041 is 1032
-mem/0: storing 4 in location 1042
-run/0: instruction string-equal/6
-run/0: trace/18 {name: "string-equal", value: 0, type: 0, properties: ["string-equal": "literal-string"]}, {name: "comparing lengths", value: 0, type: 0, properties: ["comparing lengths": "literal-string"]}
-string-equal/0: comparing lengths
-run/0: instruction string-equal/7
-run/0: {name: "length-equal?", value: 5, type: 3, properties: ["length-equal?": "boolean"]} <- equal/13 {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]}, {name: "b-len", value: 4, type: 1, properties: ["b-len": "integer"]}
-run/0: ingredient 0 is a-len
-mem/0: location 1040 is 0
-run/0: ingredient 1 is b-len
-mem/0: location 1042 is 4
-run/0: product 0 is 0
-mem/0: storing 0 in location 1043
-run/0: instruction string-equal/8
-run/0: break-if/11 {name: "length-equal?", value: 5, type: 3, properties: ["length-equal?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
-mem/0: location 1043 is 0
-run/0: ingredient 0 is 0
-run/0: jump-if fell through
-run/0: instruction string-equal/9
-run/0: reply/33 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: result 0 is 0
-mem/0: storing 0 in location 3
-run/0: instruction string-equal-with-empty/1
-run/0: memory-should-contain/46 {name: "
-    3 <- 0  # "" != abcd
-  ", value: 0, type: 0, properties: ["
-    3 <- 0  # "" != abcd
-  ": "literal-string"]}
-run/0: checking location 3
diff --git a/cpp/.traces/string_literal b/cpp/.traces/string_literal
deleted file mode 100644
index 991095f5..00000000
--- a/cpp/.traces/string_literal
+++ /dev/null
@@ -1,3 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "abc def", value: 0, type: 0, properties: ["abc def": "literal-string"]}
-parse/0:   product: {name: "1", value: 0, type: 2-5-4, properties: ["1": "address":"array":"character"]}
diff --git a/cpp/.traces/string_literal_and_comment b/cpp/.traces/string_literal_and_comment
deleted file mode 100644
index 6df4c4d6..00000000
--- a/cpp/.traces/string_literal_and_comment
+++ /dev/null
@@ -1,3 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "abc", value: 0, type: 0, properties: ["abc": "literal-string"]}
-parse/0:   product: {name: "1", value: 0, type: 2-5-4, properties: ["1": "address":"array":"character"]}
diff --git a/cpp/.traces/string_literal_nested b/cpp/.traces/string_literal_nested
deleted file mode 100644
index 96a6e7b5..00000000
--- a/cpp/.traces/string_literal_nested
+++ /dev/null
@@ -1,3 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "abc [def]", value: 0, type: 0, properties: ["abc [def]": "literal-string"]}
-parse/0:   product: {name: "1", value: 0, type: 2-5-4, properties: ["1": "address":"array":"character"]}
diff --git a/cpp/.traces/string_literal_with_colons b/cpp/.traces/string_literal_with_colons
deleted file mode 100644
index 98e7d604..00000000
--- a/cpp/.traces/string_literal_with_colons
+++ /dev/null
@@ -1,3 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "abc:def/ghi", value: 0, type: 0, properties: ["abc:def/ghi": "literal-string"]}
-parse/0:   product: {name: "1", value: 0, type: 2-5-4, properties: ["1": "address":"array":"character"]}
diff --git a/cpp/.traces/subtract b/cpp/.traces/subtract
deleted file mode 100644
index aeec0887..00000000
--- a/cpp/.traces/subtract
+++ /dev/null
@@ -1,32 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "23", value: 0, type: 0, properties: ["23": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "34", value: 0, type: 0, properties: ["34": "literal"]}
-parse/0:   product: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-parse/0: instruction: subtract
-parse/0:   ingredient: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0:   ingredient: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-parse/0:   product: {name: "3", value: 0, type: 1, properties: ["3": "integer"]}
-after-brace/0: recipe main
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: subtract ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "23", value: 23, type: 0, properties: ["23": "literal"]}
-run/0: ingredient 0 is 23
-mem/0: storing 23 in location 1
-run/0: instruction main/1
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
-run/0: ingredient 0 is 34
-mem/0: storing 34 in location 2
-run/0: instruction main/2
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- subtract/3 {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "2", value: 2, type: 1, properties: ["2": "integer"]}
-run/0: ingredient 0 is 1
-mem/0: location 1 is 23
-run/0: ingredient 1 is 2
-mem/0: location 2 is 34
-run/0: product 0 is -11
-mem/0: storing -11 in location 3
diff --git a/cpp/.traces/subtract_literal b/cpp/.traces/subtract_literal
deleted file mode 100644
index 9d8202ca..00000000
--- a/cpp/.traces/subtract_literal
+++ /dev/null
@@ -1,14 +0,0 @@
-parse/0: instruction: subtract
-parse/0:   ingredient: {name: "5", value: 0, type: 0, properties: ["5": "literal"]}
-parse/0:   ingredient: {name: "2", value: 0, type: 0, properties: ["2": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-after-brace/0: recipe main
-after-brace/0: subtract ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- subtract/3 {name: "5", value: 5, type: 0, properties: ["5": "literal"]}, {name: "2", value: 2, type: 0, properties: ["2": "literal"]}
-run/0: ingredient 0 is 5
-run/0: ingredient 1 is 2
-run/0: product 0 is 3
-mem/0: storing 3 in location 1
diff --git a/cpp/.traces/surrounding_space b/cpp/.traces/surrounding_space
deleted file mode 100644
index aeddde25..00000000
--- a/cpp/.traces/surrounding_space
+++ /dev/null
@@ -1,51 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "5", value: 0, type: 0, properties: ["5": "literal"]}
-parse/0:   product: {name: "10", value: 0, type: 1, properties: ["10": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "5", value: 0, type: 0, properties: ["5": "literal"]}
-parse/0:   product: {name: "20", value: 0, type: 1, properties: ["20": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "10", value: 0, type: 0, properties: ["10": "literal"]}
-parse/0:   product: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "20", value: 0, type: 0, properties: ["20": "literal"]}
-parse/0:   product: {name: "0", value: 0, type: 2-5-1, properties: ["0": "address":"array":"location", "names": "dummy"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "32", value: 0, type: 0, properties: ["32": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "33", value: 0, type: 0, properties: ["33": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer", "space": "1"]}
-name/0: recipe main is surrounded by dummy
-after-brace/0: recipe main
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: copy ...
-after-brace/0: copy ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: {name: "10", value: 10, type: 1, properties: ["10": "integer"]} <- copy/1 {name: "5", value: 5, type: 0, properties: ["5": "literal"]}
-run/0: ingredient 0 is 5
-mem/0: storing 5 in location 10
-run/0: instruction main/1
-run/0: {name: "20", value: 20, type: 1, properties: ["20": "integer"]} <- copy/1 {name: "5", value: 5, type: 0, properties: ["5": "literal"]}
-run/0: ingredient 0 is 5
-mem/0: storing 5 in location 20
-run/0: instruction main/2
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- copy/1 {name: "10", value: 10, type: 0, properties: ["10": "literal"]}
-run/0: ingredient 0 is 10
-run/0: instruction main/3
-run/0: {name: "0", value: 0, type: 2-5-1, properties: ["0": "address":"array":"location", "names": "dummy"]} <- copy/1 {name: "20", value: 20, type: 0, properties: ["20": "literal"]}
-run/0: ingredient 0 is 20
-mem/0: storing 20 in location 11
-run/0: instruction main/4
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "32", value: 32, type: 0, properties: ["32": "literal"]}
-run/0: ingredient 0 is 32
-mem/0: storing 32 in location 12
-run/0: instruction main/5
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer", "space": "1"]} <- copy/1 {name: "33", value: 33, type: 0, properties: ["33": "literal"]}
-run/0: ingredient 0 is 33
-mem/0: storing 33 in location 22
diff --git a/cpp/.traces/trace b/cpp/.traces/trace
deleted file mode 100644
index f2c6721b..00000000
--- a/cpp/.traces/trace
+++ /dev/null
@@ -1,10 +0,0 @@
-parse/0: instruction: trace
-parse/0:   ingredient: {name: "foo", value: 0, type: 0, properties: ["foo": "literal-string"]}
-parse/0:   ingredient: {name: "this is a trace in mu", value: 0, type: 0, properties: ["this is a trace in mu": "literal-string"]}
-after-brace/0: recipe main
-after-brace/0: trace ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: trace/18 {name: "foo", value: 0, type: 0, properties: ["foo": "literal-string"]}, {name: "this is a trace in mu", value: 0, type: 0, properties: ["this is a trace in mu": "literal-string"]}
-foo/0: this is a trace in mu
diff --git a/cpp/.traces/trace_check_passes_silently b/cpp/.traces/trace_check_passes_silently
deleted file mode 100644
index c5a73e5d..00000000
--- a/cpp/.traces/trace_check_passes_silently
+++ /dev/null
@@ -1,37 +0,0 @@
-parse/0: instruction: run
-parse/0:   ingredient: {name: "
-    trace [a], [b]
-  ", value: 0, type: 0, properties: ["
-    trace [a], [b]
-  ": "literal-string"]}
-parse/0: instruction: trace-should-contain
-parse/0:   ingredient: {name: "
-    a: b
-  ", value: 0, type: 0, properties: ["
-    a: b
-  ": "literal-string"]}
-after-brace/0: recipe main
-after-brace/0: run ...
-after-brace/0: trace-should-contain ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: run/45 {name: "
-    trace [a], [b]
-  ", value: 0, type: 0, properties: ["
-    trace [a], [b]
-  ": "literal-string"]}
-parse/0: instruction: trace
-parse/0:   ingredient: {name: "a", value: 0, type: 0, properties: ["a": "literal-string"]}
-parse/0:   ingredient: {name: "b", value: 0, type: 0, properties: ["b": "literal-string"]}
-after-brace/0: recipe run1001
-after-brace/0: trace ...
-run/0: instruction run1001/0
-run/0: trace/18 {name: "a", value: 0, type: 0, properties: ["a": "literal-string"]}, {name: "b", value: 0, type: 0, properties: ["b": "literal-string"]}
-a/0: b
-run/0: instruction main/1
-run/0: trace-should-contain/47 {name: "
-    a: b
-  ", value: 0, type: 0, properties: ["
-    a: b
-  ": "literal-string"]}
diff --git a/cpp/.traces/trace_check_warns_on_failure b/cpp/.traces/trace_check_warns_on_failure
deleted file mode 100644
index 7911d5ae..00000000
--- a/cpp/.traces/trace_check_warns_on_failure
+++ /dev/null
@@ -1,21 +0,0 @@
-parse/0: instruction: trace-should-contain
-parse/0:   ingredient: {name: "
-    a: b
-    a: d
-  ", value: 0, type: 0, properties: ["
-    a: b
-    a: d
-  ": "literal-string"]}
-after-brace/0: recipe main
-after-brace/0: trace-should-contain ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: trace-should-contain/47 {name: "
-    a: b
-    a: d
-  ", value: 0, type: 0, properties: ["
-    a: b
-    a: d
-  ": "literal-string"]}
-warn/0: missing [b] in trace layer a
diff --git a/cpp/.traces/trace_check_warns_on_failure_in_later_line b/cpp/.traces/trace_check_warns_on_failure_in_later_line
deleted file mode 100644
index adf98716..00000000
--- a/cpp/.traces/trace_check_warns_on_failure_in_later_line
+++ /dev/null
@@ -1,42 +0,0 @@
-parse/0: instruction: run
-parse/0:   ingredient: {name: "
-    trace [a], [b]
-  ", value: 0, type: 0, properties: ["
-    trace [a], [b]
-  ": "literal-string"]}
-parse/0: instruction: trace-should-contain
-parse/0:   ingredient: {name: "
-    a: b
-    a: d
-  ", value: 0, type: 0, properties: ["
-    a: b
-    a: d
-  ": "literal-string"]}
-after-brace/0: recipe main
-after-brace/0: run ...
-after-brace/0: trace-should-contain ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: run/45 {name: "
-    trace [a], [b]
-  ", value: 0, type: 0, properties: ["
-    trace [a], [b]
-  ": "literal-string"]}
-parse/0: instruction: trace
-parse/0:   ingredient: {name: "a", value: 0, type: 0, properties: ["a": "literal-string"]}
-parse/0:   ingredient: {name: "b", value: 0, type: 0, properties: ["b": "literal-string"]}
-after-brace/0: recipe run1001
-after-brace/0: trace ...
-run/0: instruction run1001/0
-run/0: trace/18 {name: "a", value: 0, type: 0, properties: ["a": "literal-string"]}, {name: "b", value: 0, type: 0, properties: ["b": "literal-string"]}
-a/0: b
-run/0: instruction main/1
-run/0: trace-should-contain/47 {name: "
-    a: b
-    a: d
-  ", value: 0, type: 0, properties: ["
-    a: b
-    a: d
-  ": "literal-string"]}
-warn/0: missing [d] in trace layer a
diff --git a/cpp/.traces/trace_negative_check_passes_silently b/cpp/.traces/trace_negative_check_passes_silently
deleted file mode 100644
index e433c340..00000000
--- a/cpp/.traces/trace_negative_check_passes_silently
+++ /dev/null
@@ -1,16 +0,0 @@
-parse/0: instruction: trace-should-not-contain
-parse/0:   ingredient: {name: "
-    a: b
-  ", value: 0, type: 0, properties: ["
-    a: b
-  ": "literal-string"]}
-after-brace/0: recipe main
-after-brace/0: trace-should-not-contain ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: trace-should-not-contain/48 {name: "
-    a: b
-  ", value: 0, type: 0, properties: ["
-    a: b
-  ": "literal-string"]}
diff --git a/cpp/.traces/trace_negative_check_warns_on_any_unexpected_line b/cpp/.traces/trace_negative_check_warns_on_any_unexpected_line
deleted file mode 100644
index daa52d8e..00000000
--- a/cpp/.traces/trace_negative_check_warns_on_any_unexpected_line
+++ /dev/null
@@ -1,42 +0,0 @@
-parse/0: instruction: run
-parse/0:   ingredient: {name: "
-    trace [a], [d]
-  ", value: 0, type: 0, properties: ["
-    trace [a], [d]
-  ": "literal-string"]}
-parse/0: instruction: trace-should-not-contain
-parse/0:   ingredient: {name: "
-    a: b
-    a: d
-  ", value: 0, type: 0, properties: ["
-    a: b
-    a: d
-  ": "literal-string"]}
-after-brace/0: recipe main
-after-brace/0: run ...
-after-brace/0: trace-should-not-contain ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: run/45 {name: "
-    trace [a], [d]
-  ", value: 0, type: 0, properties: ["
-    trace [a], [d]
-  ": "literal-string"]}
-parse/0: instruction: trace
-parse/0:   ingredient: {name: "a", value: 0, type: 0, properties: ["a": "literal-string"]}
-parse/0:   ingredient: {name: "d", value: 0, type: 0, properties: ["d": "literal-string"]}
-after-brace/0: recipe run1001
-after-brace/0: trace ...
-run/0: instruction run1001/0
-run/0: trace/18 {name: "a", value: 0, type: 0, properties: ["a": "literal-string"]}, {name: "d", value: 0, type: 0, properties: ["d": "literal-string"]}
-a/0: d
-run/0: instruction main/1
-run/0: trace-should-not-contain/48 {name: "
-    a: b
-    a: d
-  ", value: 0, type: 0, properties: ["
-    a: b
-    a: d
-  ": "literal-string"]}
-warn/0: unexpected [d] in trace layer a
diff --git a/cpp/.traces/trace_negative_check_warns_on_failure b/cpp/.traces/trace_negative_check_warns_on_failure
deleted file mode 100644
index a236464f..00000000
--- a/cpp/.traces/trace_negative_check_warns_on_failure
+++ /dev/null
@@ -1,38 +0,0 @@
-parse/0: instruction: run
-parse/0:   ingredient: {name: "
-    trace [a], [b]
-  ", value: 0, type: 0, properties: ["
-    trace [a], [b]
-  ": "literal-string"]}
-parse/0: instruction: trace-should-not-contain
-parse/0:   ingredient: {name: "
-    a: b
-  ", value: 0, type: 0, properties: ["
-    a: b
-  ": "literal-string"]}
-after-brace/0: recipe main
-after-brace/0: run ...
-after-brace/0: trace-should-not-contain ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: main
-run/0: instruction main/0
-run/0: run/45 {name: "
-    trace [a], [b]
-  ", value: 0, type: 0, properties: ["
-    trace [a], [b]
-  ": "literal-string"]}
-parse/0: instruction: trace
-parse/0:   ingredient: {name: "a", value: 0, type: 0, properties: ["a": "literal-string"]}
-parse/0:   ingredient: {name: "b", value: 0, type: 0, properties: ["b": "literal-string"]}
-after-brace/0: recipe run1001
-after-brace/0: trace ...
-run/0: instruction run1001/0
-run/0: trace/18 {name: "a", value: 0, type: 0, properties: ["a": "literal-string"]}, {name: "b", value: 0, type: 0, properties: ["b": "literal-string"]}
-a/0: b
-run/0: instruction main/1
-run/0: trace-should-not-contain/48 {name: "
-    a: b
-  ", value: 0, type: 0, properties: ["
-    a: b
-  ": "literal-string"]}
-warn/0: unexpected [b] in trace layer a
diff --git a/cpp/.traces/wait_for_location b/cpp/.traces/wait_for_location
deleted file mode 100644
index ca8b9424..00000000
--- a/cpp/.traces/wait_for_location
+++ /dev/null
@@ -1,45 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0: instruction: start-running
-parse/0:   ingredient: {name: "f2", value: 0, type: 0, properties: ["f2": "recipe"]}
-parse/0: instruction: wait-for-location
-parse/0:   ingredient: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0:   product: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "34", value: 0, type: 0, properties: ["34": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-after-brace/0: recipe f1
-after-brace/0: copy ...
-after-brace/0: start-running ...
-after-brace/0: wait-for-location ...
-after-brace/0: copy ...
-after-brace/0: recipe f2
-after-brace/0: copy ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: f1
-run/0: instruction f1/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
-mem/0: storing 0 in location 1
-run/0: instruction f1/1
-run/0: start-running/34 {name: "f2", value: 0, type: 0, properties: ["f2": "recipe"]}
-run/0: ingredient 0 is f2
-new/0: routine allocated memory from 101000 to 201000
-run/0: instruction f1/2
-run/0: wait-for-location/36 {name: "1", value: 1, type: 1, properties: ["1": "integer"]}
-run/0: waiting for location 1 to change from 0
-schedule/0: f2
-run/0: instruction f2/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
-run/0: ingredient 0 is 34
-mem/0: storing 34 in location 1
-schedule/0: waking up routine
-schedule/0: f1
-run/0: instruction f1/3
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "1", value: 1, type: 1, properties: ["1": "integer"]}
-run/0: ingredient 0 is 1
-mem/0: location 1 is 34
-mem/0: storing 34 in location 2
diff --git a/cpp/.traces/wait_for_routine b/cpp/.traces/wait_for_routine
deleted file mode 100644
index b3efbb97..00000000
--- a/cpp/.traces/wait_for_routine
+++ /dev/null
@@ -1,47 +0,0 @@
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0: instruction: start-running
-parse/0:   ingredient: {name: "f2", value: 0, type: 0, properties: ["f2": "recipe"]}
-parse/0:   product: {name: "2", value: 0, type: 1, properties: ["2": "integer", "routine": ]}
-parse/0: instruction: wait-for-routine
-parse/0:   ingredient: {name: "2", value: 0, type: 1, properties: ["2": "integer", "routine": ]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-parse/0:   product: {name: "3", value: 0, type: 1, properties: ["3": "integer"]}
-parse/0: instruction: copy
-parse/0:   ingredient: {name: "34", value: 0, type: 0, properties: ["34": "literal"]}
-parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
-after-brace/0: recipe f1
-after-brace/0: copy ...
-after-brace/0: start-running ...
-after-brace/0: wait-for-routine ...
-after-brace/0: copy ...
-after-brace/0: recipe f2
-after-brace/0: copy ...
-new/0: routine allocated memory from 1000 to 101000
-schedule/0: f1
-run/0: instruction f1/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
-run/0: ingredient 0 is 0
-mem/0: storing 0 in location 1
-run/0: instruction f1/1
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer", "routine": ]} <- start-running/34 {name: "f2", value: 0, type: 0, properties: ["f2": "recipe"]}
-run/0: ingredient 0 is f2
-new/0: routine allocated memory from 101000 to 201000
-mem/0: storing 2 in location 2
-run/0: instruction f1/2
-run/0: wait-for-routine/37 {name: "2", value: 2, type: 1, properties: ["2": "integer", "routine": ]}
-run/0: waiting for routine 2
-schedule/0: waking up routine
-schedule/0: f2
-run/0: instruction f2/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
-run/0: ingredient 0 is 34
-mem/0: storing 34 in location 1
-schedule/0: f1
-run/0: instruction f1/3
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- copy/1 {name: "1", value: 1, type: 1, properties: ["1": "integer"]}
-run/0: ingredient 0 is 1
-mem/0: location 1 is 34
-mem/0: storing 34 in location 3