about summary refs log tree commit diff stats
path: root/cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp')
-rw-r--r--cpp/.traces/string-equal-common-lengths-but-distinct64
-rw-r--r--cpp/.traces/string-equal-distinct-lengths6
-rw-r--r--cpp/.traces/string-equal-identical78
-rw-r--r--cpp/.traces/string-equal-reflexive78
-rw-r--r--cpp/.traces/string-equal-with-empty6
-rw-r--r--cpp/040string.mu2
6 files changed, 126 insertions, 108 deletions
diff --git a/cpp/.traces/string-equal-common-lengths-but-distinct b/cpp/.traces/string-equal-common-lengths-but-distinct
index ac5a12ce..58112874 100644
--- a/cpp/.traces/string-equal-common-lengths-but-distinct
+++ b/cpp/.traces/string-equal-common-lengths-but-distinct
@@ -46,32 +46,36 @@ run/0: instruction string-equal/4
 mem/0: location 1042 is 1034
 mem/0: storing 3 in location 1043
 run/0: instruction string-equal/6
+string-equal/0: comparing lengths
+run/0: instruction string-equal/7
 run/0: ingredient 0 is a-len
 mem/0: location 1041 is 3
 run/0: ingredient 1 is b-len
 mem/0: location 1043 is 3
 run/0: product 0 is 1
 mem/0: storing 1 in location 1044
-run/0: instruction string-equal/7
+run/0: instruction string-equal/8
 mem/0: location 1044 is 1
 run/0: ingredient 0 is 1
 run/0: ingredient 1 is 
-run/0: jumping to instruction 9
-run/0: instruction string-equal/10
+run/0: jumping to instruction 10
+run/0: instruction string-equal/11
+string-equal/0: comparing characters
+run/0: instruction string-equal/12
 run/0: ingredient 0 is 0
 mem/0: storing 0 in location 1045
-run/0: instruction string-equal/12
+run/0: instruction string-equal/14
 run/0: ingredient 0 is i
 mem/0: location 1045 is 0
 run/0: ingredient 1 is a-len
 mem/0: location 1041 is 3
 run/0: product 0 is 0
 mem/0: storing 0 in location 1046
-run/0: instruction string-equal/13
+run/0: instruction string-equal/15
 mem/0: location 1046 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
-run/0: instruction string-equal/14
+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": ]}
 mem/0: location 1040 is 1030
 run/0: ingredient 1 is {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
@@ -81,7 +85,7 @@ run/0: its type is 8
 mem/0: location 1031 is 97
 run/0: product 0 is 97
 mem/0: storing 97 in location 1047
-run/0: instruction string-equal/15
+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": ]}
 mem/0: location 1042 is 1034
 run/0: ingredient 1 is {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
@@ -91,39 +95,39 @@ run/0: its type is 8
 mem/0: location 1035 is 97
 run/0: product 0 is 97
 mem/0: storing 97 in location 1048
-run/0: instruction string-equal/17
+run/0: instruction string-equal/19
 run/0: ingredient 0 is a2
 mem/0: location 1047 is 97
 run/0: ingredient 1 is b2
 mem/0: location 1048 is 97
 run/0: product 0 is 1
 mem/0: storing 1 in location 1049
-run/0: instruction string-equal/18
+run/0: instruction string-equal/20
 mem/0: location 1049 is 1
 run/0: ingredient 0 is 1
 run/0: ingredient 1 is 
-run/0: jumping to instruction 20
-run/0: instruction string-equal/21
+run/0: jumping to instruction 22
+run/0: instruction string-equal/23
 run/0: ingredient 0 is i
 mem/0: location 1045 is 0
 run/0: ingredient 1 is 1
 run/0: product 0 is 1
 mem/0: storing 1 in location 1045
-run/0: instruction string-equal/22
+run/0: instruction string-equal/24
 run/0: ingredient 0 is -11
-run/0: pc now 11
-run/0: instruction string-equal/12
+run/0: pc now 13
+run/0: instruction string-equal/14
 run/0: ingredient 0 is i
 mem/0: location 1045 is 1
 run/0: ingredient 1 is a-len
 mem/0: location 1041 is 3
 run/0: product 0 is 0
 mem/0: storing 0 in location 1046
-run/0: instruction string-equal/13
+run/0: instruction string-equal/15
 mem/0: location 1046 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
-run/0: instruction string-equal/14
+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": ]}
 mem/0: location 1040 is 1030
 run/0: ingredient 1 is {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
@@ -133,7 +137,7 @@ run/0: its type is 8
 mem/0: location 1032 is 98
 run/0: product 0 is 98
 mem/0: storing 98 in location 1047
-run/0: instruction string-equal/15
+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": ]}
 mem/0: location 1042 is 1034
 run/0: ingredient 1 is {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
@@ -143,39 +147,39 @@ run/0: its type is 8
 mem/0: location 1036 is 98
 run/0: product 0 is 98
 mem/0: storing 98 in location 1048
-run/0: instruction string-equal/17
+run/0: instruction string-equal/19
 run/0: ingredient 0 is a2
 mem/0: location 1047 is 98
 run/0: ingredient 1 is b2
 mem/0: location 1048 is 98
 run/0: product 0 is 1
 mem/0: storing 1 in location 1049
-run/0: instruction string-equal/18
+run/0: instruction string-equal/20
 mem/0: location 1049 is 1
 run/0: ingredient 0 is 1
 run/0: ingredient 1 is 
-run/0: jumping to instruction 20
-run/0: instruction string-equal/21
+run/0: jumping to instruction 22
+run/0: instruction string-equal/23
 run/0: ingredient 0 is i
 mem/0: location 1045 is 1
 run/0: ingredient 1 is 1
 run/0: product 0 is 2
 mem/0: storing 2 in location 1045
-run/0: instruction string-equal/22
+run/0: instruction string-equal/24
 run/0: ingredient 0 is -11
-run/0: pc now 11
-run/0: instruction string-equal/12
+run/0: pc now 13
+run/0: instruction string-equal/14
 run/0: ingredient 0 is i
 mem/0: location 1045 is 2
 run/0: ingredient 1 is a-len
 mem/0: location 1041 is 3
 run/0: product 0 is 0
 mem/0: storing 0 in location 1046
-run/0: instruction string-equal/13
+run/0: instruction string-equal/15
 mem/0: location 1046 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
-run/0: instruction string-equal/14
+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": ]}
 mem/0: location 1040 is 1030
 run/0: ingredient 1 is {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
@@ -185,7 +189,7 @@ run/0: its type is 8
 mem/0: location 1033 is 99
 run/0: product 0 is 99
 mem/0: storing 99 in location 1047
-run/0: instruction string-equal/15
+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": ]}
 mem/0: location 1042 is 1034
 run/0: ingredient 1 is {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
@@ -195,17 +199,17 @@ run/0: its type is 8
 mem/0: location 1037 is 100
 run/0: product 0 is 100
 mem/0: storing 100 in location 1048
-run/0: instruction string-equal/17
+run/0: instruction string-equal/19
 run/0: ingredient 0 is a2
 mem/0: location 1047 is 99
 run/0: ingredient 1 is b2
 mem/0: location 1048 is 100
 run/0: product 0 is 0
 mem/0: storing 0 in location 1049
-run/0: instruction string-equal/18
+run/0: instruction string-equal/20
 mem/0: location 1049 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
-run/0: instruction string-equal/19
+run/0: instruction string-equal/21
 run/0: result 0 is 0
 mem/0: storing 0 in location 3
diff --git a/cpp/.traces/string-equal-distinct-lengths b/cpp/.traces/string-equal-distinct-lengths
index 98444b85..6008eaf4 100644
--- a/cpp/.traces/string-equal-distinct-lengths
+++ b/cpp/.traces/string-equal-distinct-lengths
@@ -46,16 +46,18 @@ run/0: instruction string-equal/4
 mem/0: location 1043 is 1034
 mem/0: storing 4 in location 1044
 run/0: instruction string-equal/6
+string-equal/0: comparing lengths
+run/0: instruction string-equal/7
 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 4
 run/0: product 0 is 0
 mem/0: storing 0 in location 1045
-run/0: instruction string-equal/7
+run/0: instruction string-equal/8
 mem/0: location 1045 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
-run/0: instruction string-equal/8
+run/0: instruction string-equal/9
 run/0: result 0 is 0
 mem/0: storing 0 in location 3
diff --git a/cpp/.traces/string-equal-identical b/cpp/.traces/string-equal-identical
index 4a878121..ad2db713 100644
--- a/cpp/.traces/string-equal-identical
+++ b/cpp/.traces/string-equal-identical
@@ -46,32 +46,36 @@ run/0: instruction string-equal/4
 mem/0: location 1042 is 1034
 mem/0: storing 3 in location 1043
 run/0: instruction string-equal/6
+string-equal/0: comparing lengths
+run/0: instruction string-equal/7
 run/0: ingredient 0 is a-len
 mem/0: location 1041 is 3
 run/0: ingredient 1 is b-len
 mem/0: location 1043 is 3
 run/0: product 0 is 1
 mem/0: storing 1 in location 1044
-run/0: instruction string-equal/7
+run/0: instruction string-equal/8
 mem/0: location 1044 is 1
 run/0: ingredient 0 is 1
 run/0: ingredient 1 is 
-run/0: jumping to instruction 9
-run/0: instruction string-equal/10
+run/0: jumping to instruction 10
+run/0: instruction string-equal/11
+string-equal/0: comparing characters
+run/0: instruction string-equal/12
 run/0: ingredient 0 is 0
 mem/0: storing 0 in location 1045
-run/0: instruction string-equal/12
+run/0: instruction string-equal/14
 run/0: ingredient 0 is i
 mem/0: location 1045 is 0
 run/0: ingredient 1 is a-len
 mem/0: location 1041 is 3
 run/0: product 0 is 0
 mem/0: storing 0 in location 1046
-run/0: instruction string-equal/13
+run/0: instruction string-equal/15
 mem/0: location 1046 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
-run/0: instruction string-equal/14
+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": ]}
 mem/0: location 1040 is 1030
 run/0: ingredient 1 is {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
@@ -81,7 +85,7 @@ run/0: its type is 8
 mem/0: location 1031 is 97
 run/0: product 0 is 97
 mem/0: storing 97 in location 1047
-run/0: instruction string-equal/15
+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": ]}
 mem/0: location 1042 is 1034
 run/0: ingredient 1 is {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
@@ -91,39 +95,39 @@ run/0: its type is 8
 mem/0: location 1035 is 97
 run/0: product 0 is 97
 mem/0: storing 97 in location 1048
-run/0: instruction string-equal/17
+run/0: instruction string-equal/19
 run/0: ingredient 0 is a2
 mem/0: location 1047 is 97
 run/0: ingredient 1 is b2
 mem/0: location 1048 is 97
 run/0: product 0 is 1
 mem/0: storing 1 in location 1049
-run/0: instruction string-equal/18
+run/0: instruction string-equal/20
 mem/0: location 1049 is 1
 run/0: ingredient 0 is 1
 run/0: ingredient 1 is 
-run/0: jumping to instruction 20
-run/0: instruction string-equal/21
+run/0: jumping to instruction 22
+run/0: instruction string-equal/23
 run/0: ingredient 0 is i
 mem/0: location 1045 is 0
 run/0: ingredient 1 is 1
 run/0: product 0 is 1
 mem/0: storing 1 in location 1045
-run/0: instruction string-equal/22
+run/0: instruction string-equal/24
 run/0: ingredient 0 is -11
-run/0: pc now 11
-run/0: instruction string-equal/12
+run/0: pc now 13
+run/0: instruction string-equal/14
 run/0: ingredient 0 is i
 mem/0: location 1045 is 1
 run/0: ingredient 1 is a-len
 mem/0: location 1041 is 3
 run/0: product 0 is 0
 mem/0: storing 0 in location 1046
-run/0: instruction string-equal/13
+run/0: instruction string-equal/15
 mem/0: location 1046 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
-run/0: instruction string-equal/14
+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": ]}
 mem/0: location 1040 is 1030
 run/0: ingredient 1 is {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
@@ -133,7 +137,7 @@ run/0: its type is 8
 mem/0: location 1032 is 98
 run/0: product 0 is 98
 mem/0: storing 98 in location 1047
-run/0: instruction string-equal/15
+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": ]}
 mem/0: location 1042 is 1034
 run/0: ingredient 1 is {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
@@ -143,39 +147,39 @@ run/0: its type is 8
 mem/0: location 1036 is 98
 run/0: product 0 is 98
 mem/0: storing 98 in location 1048
-run/0: instruction string-equal/17
+run/0: instruction string-equal/19
 run/0: ingredient 0 is a2
 mem/0: location 1047 is 98
 run/0: ingredient 1 is b2
 mem/0: location 1048 is 98
 run/0: product 0 is 1
 mem/0: storing 1 in location 1049
-run/0: instruction string-equal/18
+run/0: instruction string-equal/20
 mem/0: location 1049 is 1
 run/0: ingredient 0 is 1
 run/0: ingredient 1 is 
-run/0: jumping to instruction 20
-run/0: instruction string-equal/21
+run/0: jumping to instruction 22
+run/0: instruction string-equal/23
 run/0: ingredient 0 is i
 mem/0: location 1045 is 1
 run/0: ingredient 1 is 1
 run/0: product 0 is 2
 mem/0: storing 2 in location 1045
-run/0: instruction string-equal/22
+run/0: instruction string-equal/24
 run/0: ingredient 0 is -11
-run/0: pc now 11
-run/0: instruction string-equal/12
+run/0: pc now 13
+run/0: instruction string-equal/14
 run/0: ingredient 0 is i
 mem/0: location 1045 is 2
 run/0: ingredient 1 is a-len
 mem/0: location 1041 is 3
 run/0: product 0 is 0
 mem/0: storing 0 in location 1046
-run/0: instruction string-equal/13
+run/0: instruction string-equal/15
 mem/0: location 1046 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
-run/0: instruction string-equal/14
+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": ]}
 mem/0: location 1040 is 1030
 run/0: ingredient 1 is {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
@@ -185,7 +189,7 @@ run/0: its type is 8
 mem/0: location 1033 is 99
 run/0: product 0 is 99
 mem/0: storing 99 in location 1047
-run/0: instruction string-equal/15
+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": ]}
 mem/0: location 1042 is 1034
 run/0: ingredient 1 is {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
@@ -195,39 +199,39 @@ run/0: its type is 8
 mem/0: location 1037 is 99
 run/0: product 0 is 99
 mem/0: storing 99 in location 1048
-run/0: instruction string-equal/17
+run/0: instruction string-equal/19
 run/0: ingredient 0 is a2
 mem/0: location 1047 is 99
 run/0: ingredient 1 is b2
 mem/0: location 1048 is 99
 run/0: product 0 is 1
 mem/0: storing 1 in location 1049
-run/0: instruction string-equal/18
+run/0: instruction string-equal/20
 mem/0: location 1049 is 1
 run/0: ingredient 0 is 1
 run/0: ingredient 1 is 
-run/0: jumping to instruction 20
-run/0: instruction string-equal/21
+run/0: jumping to instruction 22
+run/0: instruction string-equal/23
 run/0: ingredient 0 is i
 mem/0: location 1045 is 2
 run/0: ingredient 1 is 1
 run/0: product 0 is 3
 mem/0: storing 3 in location 1045
-run/0: instruction string-equal/22
+run/0: instruction string-equal/24
 run/0: ingredient 0 is -11
-run/0: pc now 11
-run/0: instruction string-equal/12
+run/0: pc now 13
+run/0: instruction string-equal/14
 run/0: ingredient 0 is i
 mem/0: location 1045 is 3
 run/0: ingredient 1 is a-len
 mem/0: location 1041 is 3
 run/0: product 0 is 1
 mem/0: storing 1 in location 1046
-run/0: instruction string-equal/13
+run/0: instruction string-equal/15
 mem/0: location 1046 is 1
 run/0: ingredient 0 is 1
 run/0: ingredient 1 is 
-run/0: jumping to instruction 23
-run/0: instruction string-equal/24
+run/0: jumping to instruction 25
+run/0: instruction string-equal/26
 run/0: result 0 is 1
 mem/0: storing 1 in location 3
diff --git a/cpp/.traces/string-equal-reflexive b/cpp/.traces/string-equal-reflexive
index 11d0aadf..be1548bb 100644
--- a/cpp/.traces/string-equal-reflexive
+++ b/cpp/.traces/string-equal-reflexive
@@ -38,32 +38,36 @@ run/0: instruction string-equal/4
 mem/0: location 1038 is 1030
 mem/0: storing 3 in location 1039
 run/0: instruction string-equal/6
+string-equal/0: comparing lengths
+run/0: instruction string-equal/7
 run/0: ingredient 0 is a-len
 mem/0: location 1037 is 3
 run/0: ingredient 1 is b-len
 mem/0: location 1039 is 3
 run/0: product 0 is 1
 mem/0: storing 1 in location 1040
-run/0: instruction string-equal/7
+run/0: instruction string-equal/8
 mem/0: location 1040 is 1
 run/0: ingredient 0 is 1
 run/0: ingredient 1 is 
-run/0: jumping to instruction 9
-run/0: instruction string-equal/10
+run/0: jumping to instruction 10
+run/0: instruction string-equal/11
+string-equal/0: comparing characters
+run/0: instruction string-equal/12
 run/0: ingredient 0 is 0
 mem/0: storing 0 in location 1041
-run/0: instruction string-equal/12
+run/0: instruction string-equal/14
 run/0: ingredient 0 is i
 mem/0: location 1041 is 0
 run/0: ingredient 1 is a-len
 mem/0: location 1037 is 3
 run/0: product 0 is 0
 mem/0: storing 0 in location 1042
-run/0: instruction string-equal/13
+run/0: instruction string-equal/15
 mem/0: location 1042 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
-run/0: instruction string-equal/14
+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": ]}
 mem/0: location 1036 is 1030
 run/0: ingredient 1 is {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
@@ -73,7 +77,7 @@ run/0: its type is 8
 mem/0: location 1031 is 97
 run/0: product 0 is 97
 mem/0: storing 97 in location 1043
-run/0: instruction string-equal/15
+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": ]}
 mem/0: location 1038 is 1030
 run/0: ingredient 1 is {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
@@ -83,39 +87,39 @@ run/0: its type is 8
 mem/0: location 1031 is 97
 run/0: product 0 is 97
 mem/0: storing 97 in location 1044
-run/0: instruction string-equal/17
+run/0: instruction string-equal/19
 run/0: ingredient 0 is a2
 mem/0: location 1043 is 97
 run/0: ingredient 1 is b2
 mem/0: location 1044 is 97
 run/0: product 0 is 1
 mem/0: storing 1 in location 1045
-run/0: instruction string-equal/18
+run/0: instruction string-equal/20
 mem/0: location 1045 is 1
 run/0: ingredient 0 is 1
 run/0: ingredient 1 is 
-run/0: jumping to instruction 20
-run/0: instruction string-equal/21
+run/0: jumping to instruction 22
+run/0: instruction string-equal/23
 run/0: ingredient 0 is i
 mem/0: location 1041 is 0
 run/0: ingredient 1 is 1
 run/0: product 0 is 1
 mem/0: storing 1 in location 1041
-run/0: instruction string-equal/22
+run/0: instruction string-equal/24
 run/0: ingredient 0 is -11
-run/0: pc now 11
-run/0: instruction string-equal/12
+run/0: pc now 13
+run/0: instruction string-equal/14
 run/0: ingredient 0 is i
 mem/0: location 1041 is 1
 run/0: ingredient 1 is a-len
 mem/0: location 1037 is 3
 run/0: product 0 is 0
 mem/0: storing 0 in location 1042
-run/0: instruction string-equal/13
+run/0: instruction string-equal/15
 mem/0: location 1042 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
-run/0: instruction string-equal/14
+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": ]}
 mem/0: location 1036 is 1030
 run/0: ingredient 1 is {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
@@ -125,7 +129,7 @@ run/0: its type is 8
 mem/0: location 1032 is 98
 run/0: product 0 is 98
 mem/0: storing 98 in location 1043
-run/0: instruction string-equal/15
+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": ]}
 mem/0: location 1038 is 1030
 run/0: ingredient 1 is {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
@@ -135,39 +139,39 @@ run/0: its type is 8
 mem/0: location 1032 is 98
 run/0: product 0 is 98
 mem/0: storing 98 in location 1044
-run/0: instruction string-equal/17
+run/0: instruction string-equal/19
 run/0: ingredient 0 is a2
 mem/0: location 1043 is 98
 run/0: ingredient 1 is b2
 mem/0: location 1044 is 98
 run/0: product 0 is 1
 mem/0: storing 1 in location 1045
-run/0: instruction string-equal/18
+run/0: instruction string-equal/20
 mem/0: location 1045 is 1
 run/0: ingredient 0 is 1
 run/0: ingredient 1 is 
-run/0: jumping to instruction 20
-run/0: instruction string-equal/21
+run/0: jumping to instruction 22
+run/0: instruction string-equal/23
 run/0: ingredient 0 is i
 mem/0: location 1041 is 1
 run/0: ingredient 1 is 1
 run/0: product 0 is 2
 mem/0: storing 2 in location 1041
-run/0: instruction string-equal/22
+run/0: instruction string-equal/24
 run/0: ingredient 0 is -11
-run/0: pc now 11
-run/0: instruction string-equal/12
+run/0: pc now 13
+run/0: instruction string-equal/14
 run/0: ingredient 0 is i
 mem/0: location 1041 is 2
 run/0: ingredient 1 is a-len
 mem/0: location 1037 is 3
 run/0: product 0 is 0
 mem/0: storing 0 in location 1042
-run/0: instruction string-equal/13
+run/0: instruction string-equal/15
 mem/0: location 1042 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
-run/0: instruction string-equal/14
+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": ]}
 mem/0: location 1036 is 1030
 run/0: ingredient 1 is {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
@@ -177,7 +181,7 @@ run/0: its type is 8
 mem/0: location 1033 is 99
 run/0: product 0 is 99
 mem/0: storing 99 in location 1043
-run/0: instruction string-equal/15
+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": ]}
 mem/0: location 1038 is 1030
 run/0: ingredient 1 is {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
@@ -187,39 +191,39 @@ run/0: its type is 8
 mem/0: location 1033 is 99
 run/0: product 0 is 99
 mem/0: storing 99 in location 1044
-run/0: instruction string-equal/17
+run/0: instruction string-equal/19
 run/0: ingredient 0 is a2
 mem/0: location 1043 is 99
 run/0: ingredient 1 is b2
 mem/0: location 1044 is 99
 run/0: product 0 is 1
 mem/0: storing 1 in location 1045
-run/0: instruction string-equal/18
+run/0: instruction string-equal/20
 mem/0: location 1045 is 1
 run/0: ingredient 0 is 1
 run/0: ingredient 1 is 
-run/0: jumping to instruction 20
-run/0: instruction string-equal/21
+run/0: jumping to instruction 22
+run/0: instruction string-equal/23
 run/0: ingredient 0 is i
 mem/0: location 1041 is 2
 run/0: ingredient 1 is 1
 run/0: product 0 is 3
 mem/0: storing 3 in location 1041
-run/0: instruction string-equal/22
+run/0: instruction string-equal/24
 run/0: ingredient 0 is -11
-run/0: pc now 11
-run/0: instruction string-equal/12
+run/0: pc now 13
+run/0: instruction string-equal/14
 run/0: ingredient 0 is i
 mem/0: location 1041 is 3
 run/0: ingredient 1 is a-len
 mem/0: location 1037 is 3
 run/0: product 0 is 1
 mem/0: storing 1 in location 1042
-run/0: instruction string-equal/13
+run/0: instruction string-equal/15
 mem/0: location 1042 is 1
 run/0: ingredient 0 is 1
 run/0: ingredient 1 is 
-run/0: jumping to instruction 23
-run/0: instruction string-equal/24
+run/0: jumping to instruction 25
+run/0: instruction string-equal/26
 run/0: result 0 is 1
 mem/0: storing 1 in location 3
diff --git a/cpp/.traces/string-equal-with-empty b/cpp/.traces/string-equal-with-empty
index 12dcd23f..13f64aac 100644
--- a/cpp/.traces/string-equal-with-empty
+++ b/cpp/.traces/string-equal-with-empty
@@ -46,16 +46,18 @@ run/0: instruction string-equal/4
 mem/0: location 1040 is 1031
 mem/0: storing 4 in location 1041
 run/0: instruction string-equal/6
+string-equal/0: comparing lengths
+run/0: instruction string-equal/7
 run/0: ingredient 0 is a-len
 mem/0: location 1039 is 0
 run/0: ingredient 1 is b-len
 mem/0: location 1041 is 4
 run/0: product 0 is 0
 mem/0: storing 0 in location 1042
-run/0: instruction string-equal/7
+run/0: instruction string-equal/8
 mem/0: location 1042 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
-run/0: instruction string-equal/8
+run/0: instruction string-equal/9
 run/0: result 0 is 0
 mem/0: storing 0 in location 3
diff --git a/cpp/040string.mu b/cpp/040string.mu
index 17608e5f..b42fbc9c 100644
--- a/cpp/040string.mu
+++ b/cpp/040string.mu
@@ -6,11 +6,13 @@ recipe string-equal [
   b-len:integer <- length b:address:array:character/deref
   # compare lengths
   {
+    trace [string-equal], [comparing lengths]
     length-equal?:boolean <- equal a-len:integer, b-len:integer
     break-if length-equal?:boolean
     reply 0:literal
   }
   # compare each corresponding character
+  trace [string-equal], [comparing characters]
   i:integer <- copy 0:literal
   {
     done?:boolean <- greater-or-equal i:integer, a-len:integer