about summary refs log tree commit diff stats
path: root/cpp/.traces
diff options
context:
space:
mode:
authorKartik K. Agaram <vc@akkartik.com>2015-04-17 11:00:56 -0700
committerKartik K. Agaram <vc@akkartik.com>2015-04-17 11:00:56 -0700
commitc495d2ac7ca0d7f1c1a9bbb7d1ad5072a7eface5 (patch)
tree95db0f8d742a87eba6c15833d0ac9b982e98174d /cpp/.traces
parent353a452e691a8b55e28d7b3b1d09cf294265eba0 (diff)
downloadmu-c495d2ac7ca0d7f1c1a9bbb7d1ad5072a7eface5.tar.gz
1075
Diffstat (limited to 'cpp/.traces')
-rw-r--r--cpp/.traces/array_length2
-rw-r--r--cpp/.traces/brace_conversion2
-rw-r--r--cpp/.traces/break_cascading4
-rw-r--r--cpp/.traces/break_cascading24
-rw-r--r--cpp/.traces/break_empty_block2
-rw-r--r--cpp/.traces/break_if4
-rw-r--r--cpp/.traces/break_label2
-rw-r--r--cpp/.traces/break_nested2
-rw-r--r--cpp/.traces/break_nested_degenerate2
-rw-r--r--cpp/.traces/break_nested_degenerate22
-rw-r--r--cpp/.traces/break_unless2
-rw-r--r--cpp/.traces/closure12
-rw-r--r--cpp/.traces/convert_names_transforms_container_elements4
-rw-r--r--cpp/.traces/factorial4
-rw-r--r--cpp/.traces/get2
-rw-r--r--cpp/.traces/get_address2
-rw-r--r--cpp/.traces/get_address_indirect2
-rw-r--r--cpp/.traces/get_handles_nested_container_elements2
-rw-r--r--cpp/.traces/get_indirect2
-rw-r--r--cpp/.traces/include_nonderef_properties2
-rw-r--r--cpp/.traces/index2
-rw-r--r--cpp/.traces/index_address2
-rw-r--r--cpp/.traces/index_direct_offset2
-rw-r--r--cpp/.traces/index_indirect2
-rw-r--r--cpp/.traces/loop2
-rw-r--r--cpp/.traces/loop_nested2
-rw-r--r--cpp/.traces/loop_unless2
-rw-r--r--cpp/.traces/new4
-rw-r--r--cpp/.traces/new_array4
-rw-r--r--cpp/.traces/new_string14
-rw-r--r--cpp/.traces/next_ingredient2
-rw-r--r--cpp/.traces/reply4
-rw-r--r--cpp/.traces/reply_container4
-rw-r--r--cpp/.traces/string-equal-common-lengths-but-distinct38
-rw-r--r--cpp/.traces/string-equal-distinct-lengths14
-rw-r--r--cpp/.traces/string-equal-identical38
-rw-r--r--cpp/.traces/string-equal-reflexive34
-rw-r--r--cpp/.traces/string-equal-with-empty14
-rw-r--r--cpp/.traces/string_literal9
-rw-r--r--cpp/.traces/string_literal_nested9
-rw-r--r--cpp/.traces/string_literal_with_colons9
-rw-r--r--cpp/.traces/trace2
-rw-r--r--cpp/.traces/trace_in_mu2
43 files changed, 130 insertions, 145 deletions
diff --git a/cpp/.traces/array_length b/cpp/.traces/array_length
index 65ae6484..5484570d 100644
--- a/cpp/.traces/array_length
+++ b/cpp/.traces/array_length
@@ -10,7 +10,7 @@ parse/0:   product: {name: "3", value: 0, type: 1, properties: ["3": "integer"]}
 parse/0: instruction: 1
 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: 22
+parse/0: instruction: 23
 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
diff --git a/cpp/.traces/brace_conversion b/cpp/.traces/brace_conversion
index c9444a7c..6920866e 100644
--- a/cpp/.traces/brace_conversion
+++ b/cpp/.traces/brace_conversion
@@ -1,5 +1,5 @@
 parse/0: label: {
-parse/0: instruction: 25
+parse/0: instruction: 26
 parse/0: instruction: 1
 parse/0:   ingredient: {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
diff --git a/cpp/.traces/break_cascading b/cpp/.traces/break_cascading
index 06127e3d..1a516b99 100644
--- a/cpp/.traces/break_cascading
+++ b/cpp/.traces/break_cascading
@@ -2,10 +2,10 @@ parse/0: instruction: 1
 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: 25
+parse/0: instruction: 26
 parse/0: label: }
 parse/0: label: {
-parse/0: instruction: 25
+parse/0: instruction: 26
 parse/0: label: }
 brace/0: 1000: push (open, 1)
 brace/0: push (close, 3)
diff --git a/cpp/.traces/break_cascading2 b/cpp/.traces/break_cascading2
index 2cd8aea6..327e3ec3 100644
--- a/cpp/.traces/break_cascading2
+++ b/cpp/.traces/break_cascading2
@@ -5,13 +5,13 @@ parse/0: instruction: 1
 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: 25
+parse/0: instruction: 26
 parse/0: instruction: 1
 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: 25
+parse/0: instruction: 26
 parse/0: label: }
 brace/0: 1000: push (open, 2)
 brace/0: push (close, 5)
diff --git a/cpp/.traces/break_empty_block b/cpp/.traces/break_empty_block
index 3605ac83..2771f904 100644
--- a/cpp/.traces/break_empty_block
+++ b/cpp/.traces/break_empty_block
@@ -2,7 +2,7 @@ parse/0: instruction: 1
 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: 25
+parse/0: instruction: 26
 parse/0: label: }
 brace/0: 1000: push (open, 1)
 brace/0: push (close, 3)
diff --git a/cpp/.traces/break_if b/cpp/.traces/break_if
index d5f5d0e9..3ea882a3 100644
--- a/cpp/.traces/break_if
+++ b/cpp/.traces/break_if
@@ -5,14 +5,14 @@ parse/0: instruction: 1
 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: 26
+parse/0: instruction: 27
 parse/0:   ingredient: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
 parse/0: instruction: 1
 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: 25
+parse/0: instruction: 26
 parse/0: label: }
 brace/0: 1000: push (open, 2)
 brace/0: push (close, 5)
diff --git a/cpp/.traces/break_label b/cpp/.traces/break_label
index fe03e6c2..c73d8678 100644
--- a/cpp/.traces/break_label
+++ b/cpp/.traces/break_label
@@ -2,7 +2,7 @@ parse/0: instruction: 1
 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: 25
+parse/0: instruction: 26
 parse/0:   ingredient: {name: "+foo", value: 0, type: 0, properties: ["+foo": "offset"]}
 parse/0: label: }
 brace/0: 1000: push (open, 1)
diff --git a/cpp/.traces/break_nested b/cpp/.traces/break_nested
index ac8c5a30..ef268b47 100644
--- a/cpp/.traces/break_nested
+++ b/cpp/.traces/break_nested
@@ -5,7 +5,7 @@ parse/0: label: {
 parse/0: instruction: 1
 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: 25
+parse/0: instruction: 26
 parse/0: label: {
 parse/0: instruction: 1
 parse/0:   ingredient: {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
diff --git a/cpp/.traces/break_nested_degenerate b/cpp/.traces/break_nested_degenerate
index c2c5d1a2..6540bc51 100644
--- a/cpp/.traces/break_nested_degenerate
+++ b/cpp/.traces/break_nested_degenerate
@@ -5,7 +5,7 @@ parse/0: label: {
 parse/0: instruction: 1
 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: 25
+parse/0: instruction: 26
 parse/0: label: {
 parse/0: label: }
 parse/0: instruction: 1
diff --git a/cpp/.traces/break_nested_degenerate2 b/cpp/.traces/break_nested_degenerate2
index dcbe62ad..a1ee2035 100644
--- a/cpp/.traces/break_nested_degenerate2
+++ b/cpp/.traces/break_nested_degenerate2
@@ -5,7 +5,7 @@ parse/0: label: {
 parse/0: instruction: 1
 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: 25
+parse/0: instruction: 26
 parse/0: label: {
 parse/0: label: }
 parse/0: label: }
diff --git a/cpp/.traces/break_unless b/cpp/.traces/break_unless
index 03fd8a90..7d61dded 100644
--- a/cpp/.traces/break_unless
+++ b/cpp/.traces/break_unless
@@ -5,7 +5,7 @@ parse/0: instruction: 1
 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: 27
+parse/0: instruction: 28
 parse/0:   ingredient: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
 parse/0: instruction: 1
 parse/0:   ingredient: {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
diff --git a/cpp/.traces/closure b/cpp/.traces/closure
index f5a41ee9..0f5d2161 100644
--- a/cpp/.traces/closure
+++ b/cpp/.traces/closure
@@ -1,4 +1,4 @@
-parse/0: instruction: 31
+parse/0: instruction: 32
 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-0, properties: ["default-space": "address":"space"]}
@@ -10,7 +10,7 @@ parse/0:   product: {name: "2", value: 0, type: 1, properties: ["2": "integer",
 parse/0: instruction: 1002
 parse/0:   ingredient: {name: "1", value: 0, type: 2-0, properties: ["1": "address":"space", "names": "init-counter"]}
 parse/0:   product: {name: "3", value: 0, type: 1, properties: ["3": "integer", "raw": ]}
-parse/0: instruction: 31
+parse/0: instruction: 32
 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-0, properties: ["default-space": "address":"space"]}
@@ -20,13 +20,13 @@ parse/0:   product: {name: "x", value: 0, type: 1, properties: ["x": "integer"]}
 parse/0: instruction: 1
 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: 24
+parse/0: instruction: 25
 parse/0:   ingredient: {name: "default-space", value: 0, type: 2-0, properties: ["default-space": "address":"space"]}
-parse/0: instruction: 31
+parse/0: instruction: 32
 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-0, properties: ["default-space": "address":"space"]}
-parse/0: instruction: 23
+parse/0: instruction: 24
 parse/0:   product: {name: "0", value: 0, type: 2-0, properties: ["0": "address":"space", "names": "init-counter"]}
 parse/0: instruction: 2
 parse/0:   ingredient: {name: "y", value: 0, type: 1, properties: ["y": "integer", "space": "1"]}
@@ -35,7 +35,7 @@ parse/0:   product: {name: "y", value: 0, type: 1, properties: ["y": "integer",
 parse/0: instruction: 1
 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: 24
+parse/0: instruction: 25
 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
diff --git a/cpp/.traces/convert_names_transforms_container_elements b/cpp/.traces/convert_names_transforms_container_elements
index 0dd4f7e8..c86b6d2d 100644
--- a/cpp/.traces/convert_names_transforms_container_elements
+++ b/cpp/.traces/convert_names_transforms_container_elements
@@ -1,8 +1,8 @@
-parse/0: instruction: 18
+parse/0: instruction: 19
 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: 18
+parse/0: instruction: 19
 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"]}
diff --git a/cpp/.traces/factorial b/cpp/.traces/factorial
index 9a7f261e..d4ea095b 100644
--- a/cpp/.traces/factorial
+++ b/cpp/.traces/factorial
@@ -9,7 +9,7 @@ parse/0: instruction: 13
 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: 26
+parse/0: instruction: 27
 parse/0:   ingredient: {name: "3", value: 0, type: 3, properties: ["3": "boolean"]}
 parse/0: instruction: 4
 parse/0:   ingredient: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
@@ -19,7 +19,7 @@ parse/0: instruction: 3
 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: 28
+parse/0: instruction: 29
 parse/0: label: }
 parse/0: instruction: 1
 parse/0:   ingredient: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
diff --git a/cpp/.traces/get b/cpp/.traces/get
index 39778dbf..60d738da 100644
--- a/cpp/.traces/get
+++ b/cpp/.traces/get
@@ -4,7 +4,7 @@ parse/0:   product: {name: "12", value: 0, type: 1, properties: ["12": "integer"
 parse/0: instruction: 1
 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: 18
+parse/0: instruction: 19
 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"]}
diff --git a/cpp/.traces/get_address b/cpp/.traces/get_address
index 1a37c192..f36d4b05 100644
--- a/cpp/.traces/get_address
+++ b/cpp/.traces/get_address
@@ -4,7 +4,7 @@ parse/0:   product: {name: "12", value: 0, type: 1, properties: ["12": "integer"
 parse/0: instruction: 1
 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: 19
+parse/0: instruction: 20
 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"]}
diff --git a/cpp/.traces/get_address_indirect b/cpp/.traces/get_address_indirect
index 2f2af58b..bb74ab61 100644
--- a/cpp/.traces/get_address_indirect
+++ b/cpp/.traces/get_address_indirect
@@ -7,7 +7,7 @@ parse/0:   product: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
 parse/0: instruction: 1
 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: 19
+parse/0: instruction: 20
 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"]}
diff --git a/cpp/.traces/get_handles_nested_container_elements b/cpp/.traces/get_handles_nested_container_elements
index 4334fc26..5997b167 100644
--- a/cpp/.traces/get_handles_nested_container_elements
+++ b/cpp/.traces/get_handles_nested_container_elements
@@ -7,7 +7,7 @@ parse/0:   product: {name: "13", value: 0, type: 1, properties: ["13": "integer"
 parse/0: instruction: 1
 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: 18
+parse/0: instruction: 19
 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"]}
diff --git a/cpp/.traces/get_indirect b/cpp/.traces/get_indirect
index 98e9d9c6..b9328f71 100644
--- a/cpp/.traces/get_indirect
+++ b/cpp/.traces/get_indirect
@@ -7,7 +7,7 @@ parse/0:   product: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
 parse/0: instruction: 1
 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: 18
+parse/0: instruction: 19
 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"]}
diff --git a/cpp/.traces/include_nonderef_properties b/cpp/.traces/include_nonderef_properties
index 835c973a..b7f103fc 100644
--- a/cpp/.traces/include_nonderef_properties
+++ b/cpp/.traces/include_nonderef_properties
@@ -7,7 +7,7 @@ parse/0:   product: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
 parse/0: instruction: 1
 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: 18
+parse/0: instruction: 19
 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"]}
diff --git a/cpp/.traces/index b/cpp/.traces/index
index e9f3dd08..c5114af2 100644
--- a/cpp/.traces/index
+++ b/cpp/.traces/index
@@ -10,7 +10,7 @@ parse/0:   product: {name: "3", value: 0, type: 1, properties: ["3": "integer"]}
 parse/0: instruction: 1
 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: 20
+parse/0: instruction: 21
 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"]}
diff --git a/cpp/.traces/index_address b/cpp/.traces/index_address
index ca503f99..464a4565 100644
--- a/cpp/.traces/index_address
+++ b/cpp/.traces/index_address
@@ -10,7 +10,7 @@ parse/0:   product: {name: "3", value: 0, type: 1, properties: ["3": "integer"]}
 parse/0: instruction: 1
 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: 21
+parse/0: instruction: 22
 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"]}
diff --git a/cpp/.traces/index_direct_offset b/cpp/.traces/index_direct_offset
index 67bbbde6..021f8452 100644
--- a/cpp/.traces/index_direct_offset
+++ b/cpp/.traces/index_direct_offset
@@ -13,7 +13,7 @@ parse/0:   product: {name: "4", value: 0, type: 1, properties: ["4": "integer"]}
 parse/0: instruction: 1
 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: 20
+parse/0: instruction: 21
 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"]}
diff --git a/cpp/.traces/index_indirect b/cpp/.traces/index_indirect
index 0b3bb283..e1f6c191 100644
--- a/cpp/.traces/index_indirect
+++ b/cpp/.traces/index_indirect
@@ -13,7 +13,7 @@ parse/0:   product: {name: "4", value: 0, type: 1, properties: ["4": "integer"]}
 parse/0: instruction: 1
 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: 20
+parse/0: instruction: 21
 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"]}
diff --git a/cpp/.traces/loop b/cpp/.traces/loop
index cf494543..ba71abf6 100644
--- a/cpp/.traces/loop
+++ b/cpp/.traces/loop
@@ -8,7 +8,7 @@ parse/0: label: {
 parse/0: instruction: 1
 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: 28
+parse/0: instruction: 29
 parse/0: label: }
 brace/0: 1000: push (open, 2)
 brace/0: push (close, 5)
diff --git a/cpp/.traces/loop_nested b/cpp/.traces/loop_nested
index d6d78346..3b9fb46f 100644
--- a/cpp/.traces/loop_nested
+++ b/cpp/.traces/loop_nested
@@ -10,7 +10,7 @@ parse/0: instruction: 1
 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: 29
+parse/0: instruction: 30
 parse/0:   ingredient: {name: "4", value: 0, type: 3, properties: ["4": "boolean"]}
 parse/0: instruction: 1
 parse/0:   ingredient: {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
diff --git a/cpp/.traces/loop_unless b/cpp/.traces/loop_unless
index 9d5f5892..b26ad4c5 100644
--- a/cpp/.traces/loop_unless
+++ b/cpp/.traces/loop_unless
@@ -5,7 +5,7 @@ parse/0: instruction: 1
 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: 30
+parse/0: instruction: 31
 parse/0:   ingredient: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
 parse/0: instruction: 1
 parse/0:   ingredient: {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
diff --git a/cpp/.traces/new b/cpp/.traces/new
index 5e148caf..965d0333 100644
--- a/cpp/.traces/new
+++ b/cpp/.traces/new
@@ -1,7 +1,7 @@
-parse/0: instruction: 31
+parse/0: instruction: 32
 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: 31
+parse/0: instruction: 32
 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: 13
diff --git a/cpp/.traces/new_array b/cpp/.traces/new_array
index a480b46d..d41cc26b 100644
--- a/cpp/.traces/new_array
+++ b/cpp/.traces/new_array
@@ -1,8 +1,8 @@
-parse/0: instruction: 31
+parse/0: instruction: 32
 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: 31
+parse/0: instruction: 32
 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: 3
diff --git a/cpp/.traces/new_string b/cpp/.traces/new_string
index fe4fe3e8..525602e3 100644
--- a/cpp/.traces/new_string
+++ b/cpp/.traces/new_string
@@ -1,10 +1,10 @@
-parse/0: instruction: 31
+parse/0: instruction: 32
 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-8, properties: ["1": "address":"array":"character"]}
-parse/0: instruction: 20
-parse/0:   ingredient: {name: "1", value: 0, type: 2-5-8, properties: ["1": "address":"array":"character", "deref": ]}
+parse/0:   product: {name: "1", value: 0, type: 2-5-4, properties: ["1": "address":"array":"character"]}
+parse/0: instruction: 21
+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: 8, properties: ["2": "character"]}
+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 ...
@@ -12,11 +12,11 @@ after-brace/0: index ...
 run/0: instruction main/0
 mem/0: storing 1000 in location 1
 run/0: instruction main/1
-run/0: ingredient 0 is {name: "1", value: 1, type: 2-5-8, properties: ["1": "address":"array":"character", "deref": ]}
+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 8
+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
index a296bd69..6f9da074 100644
--- a/cpp/.traces/next_ingredient
+++ b/cpp/.traces/next_ingredient
@@ -1,6 +1,6 @@
 parse/0: instruction: 1001
 parse/0:   ingredient: {name: "2", value: 0, type: 0, properties: ["2": "literal"]}
-parse/0: instruction: 23
+parse/0: instruction: 24
 parse/0:   product: {name: "12", value: 0, type: 1, properties: ["12": "integer"]}
 parse/0: instruction: 2
 parse/0:   ingredient: {name: "1", value: 0, type: 0, properties: ["1": "literal"]}
diff --git a/cpp/.traces/reply b/cpp/.traces/reply
index 1dde3540..b83e094f 100644
--- a/cpp/.traces/reply
+++ b/cpp/.traces/reply
@@ -2,13 +2,13 @@ parse/0: instruction: 1001
 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: 23
+parse/0: instruction: 24
 parse/0:   product: {name: "12", value: 0, type: 1, properties: ["12": "integer"]}
 parse/0: instruction: 2
 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: 24
+parse/0: instruction: 25
 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 f
diff --git a/cpp/.traces/reply_container b/cpp/.traces/reply_container
index 1b491677..144b9b07 100644
--- a/cpp/.traces/reply_container
+++ b/cpp/.traces/reply_container
@@ -1,12 +1,12 @@
 parse/0: instruction: 1001
 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: 23
+parse/0: instruction: 24
 parse/0:   product: {name: "12", value: 0, type: 1, properties: ["12": "integer"]}
 parse/0: instruction: 1
 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: 24
+parse/0: instruction: 25
 parse/0:   ingredient: {name: "12", value: 0, type: 6, properties: ["12": "point"]}
 after-brace/0: recipe f
 after-brace/0: next-ingredient ...
diff --git a/cpp/.traces/string-equal-common-lengths-but-distinct b/cpp/.traces/string-equal-common-lengths-but-distinct
index 22b9eed7..ee87a24a 100644
--- a/cpp/.traces/string-equal-common-lengths-but-distinct
+++ b/cpp/.traces/string-equal-common-lengths-but-distinct
@@ -1,16 +1,16 @@
-parse/0: instruction: 31
+parse/0: instruction: 32
 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-0, properties: ["default-space": "address":"space"]}
-parse/0: instruction: 31
+parse/0: instruction: 32
 parse/0:   ingredient: {name: "abc", value: 0, type: 0, properties: ["abc": "literal-string"]}
-parse/0:   product: {name: "x", value: 0, type: 2-5-8, properties: ["x": "address":"array":"character"]}
-parse/0: instruction: 31
+parse/0:   product: {name: "x", value: 0, type: 2-5-4, properties: ["x": "address":"array":"character"]}
+parse/0: instruction: 32
 parse/0:   ingredient: {name: "abd", value: 0, type: 0, properties: ["abd": "literal-string"]}
-parse/0:   product: {name: "y", value: 0, type: 2-5-8, properties: ["y": "address":"array":"character"]}
+parse/0:   product: {name: "y", value: 0, type: 2-5-4, properties: ["y": "address":"array":"character"]}
 parse/0: instruction: 100
-parse/0:   ingredient: {name: "x", value: 0, type: 2-5-8, properties: ["x": "address":"array":"character"]}
-parse/0:   ingredient: {name: "y", value: 0, type: 2-5-8, properties: ["y": "address":"array":"character"]}
+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
@@ -78,22 +78,22 @@ mem/0: location 1046 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction string-equal/16
-run/0: ingredient 0 is {name: "a", value: 1, type: 2-5-8, properties: ["a": "address":"array":"character", "deref": ]}
+run/0: ingredient 0 is {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}
 mem/0: location 1040 is 1030
 run/0: ingredient 1 is {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
 mem/0: location 1045 is 0
 run/0: address to copy is 1031
-run/0: its type is 8
+run/0: its type is 4
 mem/0: location 1031 is 97
 run/0: product 0 is 97
 mem/0: storing 97 in location 1047
 run/0: instruction string-equal/17
-run/0: ingredient 0 is {name: "b", value: 3, type: 2-5-8, properties: ["b": "address":"array":"character", "deref": ]}
+run/0: ingredient 0 is {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}
 mem/0: location 1042 is 1034
 run/0: ingredient 1 is {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
 mem/0: location 1045 is 0
 run/0: address to copy is 1035
-run/0: its type is 8
+run/0: its type is 4
 mem/0: location 1035 is 97
 run/0: product 0 is 97
 mem/0: storing 97 in location 1048
@@ -130,22 +130,22 @@ mem/0: location 1046 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction string-equal/16
-run/0: ingredient 0 is {name: "a", value: 1, type: 2-5-8, properties: ["a": "address":"array":"character", "deref": ]}
+run/0: ingredient 0 is {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}
 mem/0: location 1040 is 1030
 run/0: ingredient 1 is {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
 mem/0: location 1045 is 1
 run/0: address to copy is 1032
-run/0: its type is 8
+run/0: its type is 4
 mem/0: location 1032 is 98
 run/0: product 0 is 98
 mem/0: storing 98 in location 1047
 run/0: instruction string-equal/17
-run/0: ingredient 0 is {name: "b", value: 3, type: 2-5-8, properties: ["b": "address":"array":"character", "deref": ]}
+run/0: ingredient 0 is {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}
 mem/0: location 1042 is 1034
 run/0: ingredient 1 is {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
 mem/0: location 1045 is 1
 run/0: address to copy is 1036
-run/0: its type is 8
+run/0: its type is 4
 mem/0: location 1036 is 98
 run/0: product 0 is 98
 mem/0: storing 98 in location 1048
@@ -182,22 +182,22 @@ mem/0: location 1046 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction string-equal/16
-run/0: ingredient 0 is {name: "a", value: 1, type: 2-5-8, properties: ["a": "address":"array":"character", "deref": ]}
+run/0: ingredient 0 is {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}
 mem/0: location 1040 is 1030
 run/0: ingredient 1 is {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
 mem/0: location 1045 is 2
 run/0: address to copy is 1033
-run/0: its type is 8
+run/0: its type is 4
 mem/0: location 1033 is 99
 run/0: product 0 is 99
 mem/0: storing 99 in location 1047
 run/0: instruction string-equal/17
-run/0: ingredient 0 is {name: "b", value: 3, type: 2-5-8, properties: ["b": "address":"array":"character", "deref": ]}
+run/0: ingredient 0 is {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}
 mem/0: location 1042 is 1034
 run/0: ingredient 1 is {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
 mem/0: location 1045 is 2
 run/0: address to copy is 1037
-run/0: its type is 8
+run/0: its type is 4
 mem/0: location 1037 is 100
 run/0: product 0 is 100
 mem/0: storing 100 in location 1048
diff --git a/cpp/.traces/string-equal-distinct-lengths b/cpp/.traces/string-equal-distinct-lengths
index 0c69eb1a..834292fe 100644
--- a/cpp/.traces/string-equal-distinct-lengths
+++ b/cpp/.traces/string-equal-distinct-lengths
@@ -1,16 +1,16 @@
-parse/0: instruction: 31
+parse/0: instruction: 32
 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-0, properties: ["default-space": "address":"space"]}
-parse/0: instruction: 31
+parse/0: instruction: 32
 parse/0:   ingredient: {name: "abc", value: 0, type: 0, properties: ["abc": "literal-string"]}
-parse/0:   product: {name: "x", value: 0, type: 2-5-8, properties: ["x": "address":"array":"character"]}
-parse/0: instruction: 31
+parse/0:   product: {name: "x", value: 0, type: 2-5-4, properties: ["x": "address":"array":"character"]}
+parse/0: instruction: 32
 parse/0:   ingredient: {name: "abcd", value: 0, type: 0, properties: ["abcd": "literal-string"]}
-parse/0:   product: {name: "y", value: 0, type: 2-5-8, properties: ["y": "address":"array":"character"]}
+parse/0:   product: {name: "y", value: 0, type: 2-5-4, properties: ["y": "address":"array":"character"]}
 parse/0: instruction: 100
-parse/0:   ingredient: {name: "x", value: 0, type: 2-5-8, properties: ["x": "address":"array":"character"]}
-parse/0:   ingredient: {name: "y", value: 0, type: 2-5-8, properties: ["y": "address":"array":"character"]}
+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
diff --git a/cpp/.traces/string-equal-identical b/cpp/.traces/string-equal-identical
index 164582af..3e16bee4 100644
--- a/cpp/.traces/string-equal-identical
+++ b/cpp/.traces/string-equal-identical
@@ -1,16 +1,16 @@
-parse/0: instruction: 31
+parse/0: instruction: 32
 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-0, properties: ["default-space": "address":"space"]}
-parse/0: instruction: 31
+parse/0: instruction: 32
 parse/0:   ingredient: {name: "abc", value: 0, type: 0, properties: ["abc": "literal-string"]}
-parse/0:   product: {name: "x", value: 0, type: 2-5-8, properties: ["x": "address":"array":"character"]}
-parse/0: instruction: 31
+parse/0:   product: {name: "x", value: 0, type: 2-5-4, properties: ["x": "address":"array":"character"]}
+parse/0: instruction: 32
 parse/0:   ingredient: {name: "abc", value: 0, type: 0, properties: ["abc": "literal-string"]}
-parse/0:   product: {name: "y", value: 0, type: 2-5-8, properties: ["y": "address":"array":"character"]}
+parse/0:   product: {name: "y", value: 0, type: 2-5-4, properties: ["y": "address":"array":"character"]}
 parse/0: instruction: 100
-parse/0:   ingredient: {name: "x", value: 0, type: 2-5-8, properties: ["x": "address":"array":"character"]}
-parse/0:   ingredient: {name: "y", value: 0, type: 2-5-8, properties: ["y": "address":"array":"character"]}
+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
@@ -78,22 +78,22 @@ mem/0: location 1046 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction string-equal/16
-run/0: ingredient 0 is {name: "a", value: 1, type: 2-5-8, properties: ["a": "address":"array":"character", "deref": ]}
+run/0: ingredient 0 is {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}
 mem/0: location 1040 is 1030
 run/0: ingredient 1 is {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
 mem/0: location 1045 is 0
 run/0: address to copy is 1031
-run/0: its type is 8
+run/0: its type is 4
 mem/0: location 1031 is 97
 run/0: product 0 is 97
 mem/0: storing 97 in location 1047
 run/0: instruction string-equal/17
-run/0: ingredient 0 is {name: "b", value: 3, type: 2-5-8, properties: ["b": "address":"array":"character", "deref": ]}
+run/0: ingredient 0 is {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}
 mem/0: location 1042 is 1034
 run/0: ingredient 1 is {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
 mem/0: location 1045 is 0
 run/0: address to copy is 1035
-run/0: its type is 8
+run/0: its type is 4
 mem/0: location 1035 is 97
 run/0: product 0 is 97
 mem/0: storing 97 in location 1048
@@ -130,22 +130,22 @@ mem/0: location 1046 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction string-equal/16
-run/0: ingredient 0 is {name: "a", value: 1, type: 2-5-8, properties: ["a": "address":"array":"character", "deref": ]}
+run/0: ingredient 0 is {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}
 mem/0: location 1040 is 1030
 run/0: ingredient 1 is {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
 mem/0: location 1045 is 1
 run/0: address to copy is 1032
-run/0: its type is 8
+run/0: its type is 4
 mem/0: location 1032 is 98
 run/0: product 0 is 98
 mem/0: storing 98 in location 1047
 run/0: instruction string-equal/17
-run/0: ingredient 0 is {name: "b", value: 3, type: 2-5-8, properties: ["b": "address":"array":"character", "deref": ]}
+run/0: ingredient 0 is {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}
 mem/0: location 1042 is 1034
 run/0: ingredient 1 is {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
 mem/0: location 1045 is 1
 run/0: address to copy is 1036
-run/0: its type is 8
+run/0: its type is 4
 mem/0: location 1036 is 98
 run/0: product 0 is 98
 mem/0: storing 98 in location 1048
@@ -182,22 +182,22 @@ mem/0: location 1046 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction string-equal/16
-run/0: ingredient 0 is {name: "a", value: 1, type: 2-5-8, properties: ["a": "address":"array":"character", "deref": ]}
+run/0: ingredient 0 is {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}
 mem/0: location 1040 is 1030
 run/0: ingredient 1 is {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
 mem/0: location 1045 is 2
 run/0: address to copy is 1033
-run/0: its type is 8
+run/0: its type is 4
 mem/0: location 1033 is 99
 run/0: product 0 is 99
 mem/0: storing 99 in location 1047
 run/0: instruction string-equal/17
-run/0: ingredient 0 is {name: "b", value: 3, type: 2-5-8, properties: ["b": "address":"array":"character", "deref": ]}
+run/0: ingredient 0 is {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}
 mem/0: location 1042 is 1034
 run/0: ingredient 1 is {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
 mem/0: location 1045 is 2
 run/0: address to copy is 1037
-run/0: its type is 8
+run/0: its type is 4
 mem/0: location 1037 is 99
 run/0: product 0 is 99
 mem/0: storing 99 in location 1048
diff --git a/cpp/.traces/string-equal-reflexive b/cpp/.traces/string-equal-reflexive
index 2a629bbb..3b478725 100644
--- a/cpp/.traces/string-equal-reflexive
+++ b/cpp/.traces/string-equal-reflexive
@@ -1,13 +1,13 @@
-parse/0: instruction: 31
+parse/0: instruction: 32
 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-0, properties: ["default-space": "address":"space"]}
-parse/0: instruction: 31
+parse/0: instruction: 32
 parse/0:   ingredient: {name: "abc", value: 0, type: 0, properties: ["abc": "literal-string"]}
-parse/0:   product: {name: "x", value: 0, type: 2-5-8, properties: ["x": "address":"array":"character"]}
+parse/0:   product: {name: "x", value: 0, type: 2-5-4, properties: ["x": "address":"array":"character"]}
 parse/0: instruction: 100
-parse/0:   ingredient: {name: "x", value: 0, type: 2-5-8, properties: ["x": "address":"array":"character"]}
-parse/0:   ingredient: {name: "x", value: 0, type: 2-5-8, properties: ["x": "address":"array":"character"]}
+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
@@ -70,22 +70,22 @@ mem/0: location 1042 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction string-equal/16
-run/0: ingredient 0 is {name: "a", value: 1, type: 2-5-8, properties: ["a": "address":"array":"character", "deref": ]}
+run/0: ingredient 0 is {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}
 mem/0: location 1036 is 1030
 run/0: ingredient 1 is {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
 mem/0: location 1041 is 0
 run/0: address to copy is 1031
-run/0: its type is 8
+run/0: its type is 4
 mem/0: location 1031 is 97
 run/0: product 0 is 97
 mem/0: storing 97 in location 1043
 run/0: instruction string-equal/17
-run/0: ingredient 0 is {name: "b", value: 3, type: 2-5-8, properties: ["b": "address":"array":"character", "deref": ]}
+run/0: ingredient 0 is {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}
 mem/0: location 1038 is 1030
 run/0: ingredient 1 is {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
 mem/0: location 1041 is 0
 run/0: address to copy is 1031
-run/0: its type is 8
+run/0: its type is 4
 mem/0: location 1031 is 97
 run/0: product 0 is 97
 mem/0: storing 97 in location 1044
@@ -122,22 +122,22 @@ mem/0: location 1042 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction string-equal/16
-run/0: ingredient 0 is {name: "a", value: 1, type: 2-5-8, properties: ["a": "address":"array":"character", "deref": ]}
+run/0: ingredient 0 is {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}
 mem/0: location 1036 is 1030
 run/0: ingredient 1 is {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
 mem/0: location 1041 is 1
 run/0: address to copy is 1032
-run/0: its type is 8
+run/0: its type is 4
 mem/0: location 1032 is 98
 run/0: product 0 is 98
 mem/0: storing 98 in location 1043
 run/0: instruction string-equal/17
-run/0: ingredient 0 is {name: "b", value: 3, type: 2-5-8, properties: ["b": "address":"array":"character", "deref": ]}
+run/0: ingredient 0 is {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}
 mem/0: location 1038 is 1030
 run/0: ingredient 1 is {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
 mem/0: location 1041 is 1
 run/0: address to copy is 1032
-run/0: its type is 8
+run/0: its type is 4
 mem/0: location 1032 is 98
 run/0: product 0 is 98
 mem/0: storing 98 in location 1044
@@ -174,22 +174,22 @@ mem/0: location 1042 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction string-equal/16
-run/0: ingredient 0 is {name: "a", value: 1, type: 2-5-8, properties: ["a": "address":"array":"character", "deref": ]}
+run/0: ingredient 0 is {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}
 mem/0: location 1036 is 1030
 run/0: ingredient 1 is {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
 mem/0: location 1041 is 2
 run/0: address to copy is 1033
-run/0: its type is 8
+run/0: its type is 4
 mem/0: location 1033 is 99
 run/0: product 0 is 99
 mem/0: storing 99 in location 1043
 run/0: instruction string-equal/17
-run/0: ingredient 0 is {name: "b", value: 3, type: 2-5-8, properties: ["b": "address":"array":"character", "deref": ]}
+run/0: ingredient 0 is {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}
 mem/0: location 1038 is 1030
 run/0: ingredient 1 is {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
 mem/0: location 1041 is 2
 run/0: address to copy is 1033
-run/0: its type is 8
+run/0: its type is 4
 mem/0: location 1033 is 99
 run/0: product 0 is 99
 mem/0: storing 99 in location 1044
diff --git a/cpp/.traces/string-equal-with-empty b/cpp/.traces/string-equal-with-empty
index 803e017b..2d10802e 100644
--- a/cpp/.traces/string-equal-with-empty
+++ b/cpp/.traces/string-equal-with-empty
@@ -1,16 +1,16 @@
-parse/0: instruction: 31
+parse/0: instruction: 32
 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-0, properties: ["default-space": "address":"space"]}
-parse/0: instruction: 31
+parse/0: instruction: 32
 parse/0:   ingredient: {name: "", value: 0, type: 0, properties: ["": "literal-string"]}
-parse/0:   product: {name: "x", value: 0, type: 2-5-8, properties: ["x": "address":"array":"character"]}
-parse/0: instruction: 31
+parse/0:   product: {name: "x", value: 0, type: 2-5-4, properties: ["x": "address":"array":"character"]}
+parse/0: instruction: 32
 parse/0:   ingredient: {name: "abcd", value: 0, type: 0, properties: ["abcd": "literal-string"]}
-parse/0:   product: {name: "y", value: 0, type: 2-5-8, properties: ["y": "address":"array":"character"]}
+parse/0:   product: {name: "y", value: 0, type: 2-5-4, properties: ["y": "address":"array":"character"]}
 parse/0: instruction: 100
-parse/0:   ingredient: {name: "x", value: 0, type: 2-5-8, properties: ["x": "address":"array":"character"]}
-parse/0:   ingredient: {name: "y", value: 0, type: 2-5-8, properties: ["y": "address":"array":"character"]}
+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
diff --git a/cpp/.traces/string_literal b/cpp/.traces/string_literal
index 0562305b..bca008a9 100644
--- a/cpp/.traces/string_literal
+++ b/cpp/.traces/string_literal
@@ -1,8 +1,3 @@
-parse/0: instruction: 31
+parse/0: instruction: 32
 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-8, properties: ["1": "address":"array":"character"]}
-new/0: abc def -> 0
-after-brace/0: recipe main
-after-brace/0: new ...
-run/0: instruction main/0
-mem/0: storing 1000 in location 1
+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
index d91739ec..aad3dc98 100644
--- a/cpp/.traces/string_literal_nested
+++ b/cpp/.traces/string_literal_nested
@@ -1,8 +1,3 @@
-parse/0: instruction: 31
+parse/0: instruction: 32
 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-8, properties: ["1": "address":"array":"character"]}
-new/0: abc [def] -> 0
-after-brace/0: recipe main
-after-brace/0: new ...
-run/0: instruction main/0
-mem/0: storing 1000 in location 1
+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
index cf30be82..65a458fe 100644
--- a/cpp/.traces/string_literal_with_colons
+++ b/cpp/.traces/string_literal_with_colons
@@ -1,8 +1,3 @@
-parse/0: instruction: 31
+parse/0: instruction: 32
 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-8, properties: ["1": "address":"array":"character"]}
-new/0: abc:def/ghi -> 0
-after-brace/0: recipe main
-after-brace/0: new ...
-run/0: instruction main/0
-mem/0: storing 1000 in location 1
+parse/0:   product: {name: "1", value: 0, type: 2-5-4, properties: ["1": "address":"array":"character"]}
diff --git a/cpp/.traces/trace b/cpp/.traces/trace
index fb4fd081..2ef6ce77 100644
--- a/cpp/.traces/trace
+++ b/cpp/.traces/trace
@@ -1,4 +1,4 @@
-parse/0: instruction: 32
+parse/0: instruction: 18
 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
diff --git a/cpp/.traces/trace_in_mu b/cpp/.traces/trace_in_mu
index dc7d8d8a..1d0be2b2 100644
--- a/cpp/.traces/trace_in_mu
+++ b/cpp/.traces/trace_in_mu
@@ -1,4 +1,4 @@
-parse/0: instruction: 32
+parse/0: instruction: 18
 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 test-trace_in_mu