diff options
-rw-r--r-- | cpp/.traces/divide_with_remainder | 2 | ||||
-rw-r--r-- | cpp/.traces/divide_with_remainder_literal | 2 | ||||
-rw-r--r-- | cpp/.traces/integer-to-decimal-digit-negative | 477 | ||||
-rw-r--r-- | cpp/.traces/integer-to-decimal-digit-positive | 675 | ||||
-rw-r--r-- | cpp/.traces/integer-to-decimal-digit-zero | 33 | ||||
-rw-r--r-- | cpp/.traces/less_than (renamed from cpp/.traces/lesser_than) | 2 | ||||
-rw-r--r-- | cpp/.traces/less_than2 (renamed from cpp/.traces/lesser_than2) | 2 | ||||
-rw-r--r-- | cpp/021arithmetic | 6 | ||||
-rw-r--r-- | cpp/024compare | 14 | ||||
-rw-r--r-- | cpp/060string.mu | 93 |
10 files changed, 1292 insertions, 14 deletions
diff --git a/cpp/.traces/divide_with_remainder b/cpp/.traces/divide_with_remainder index 867b2c0d..d8989d9c 100644 --- a/cpp/.traces/divide_with_remainder +++ b/cpp/.traces/divide_with_remainder @@ -12,7 +12,7 @@ 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 ... +after-brace/0: divide-with-remainder ... run/0: instruction main/0 run/0: ingredient 0 is 27 mem/0: storing 27 in location 1 diff --git a/cpp/.traces/divide_with_remainder_literal b/cpp/.traces/divide_with_remainder_literal index 8cb01953..05bde8a9 100644 --- a/cpp/.traces/divide_with_remainder_literal +++ b/cpp/.traces/divide_with_remainder_literal @@ -4,7 +4,7 @@ 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 ... +after-brace/0: divide-with-remainder ... run/0: instruction main/0 run/0: ingredient 0 is 9 run/0: ingredient 1 is 2 diff --git a/cpp/.traces/integer-to-decimal-digit-negative b/cpp/.traces/integer-to-decimal-digit-negative new file mode 100644 index 00000000..d629d10a --- /dev/null +++ b/cpp/.traces/integer-to-decimal-digit-negative @@ -0,0 +1,477 @@ +parse/0: instruction: 105 +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: 1 +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 test-integer-to-decimal-digit-negative +after-brace/0: integer-to-decimal-string ... +after-brace/0: copy ... +run/0: instruction test-integer-to-decimal-digit-negative/0 +run/0: instruction integer-to-decimal-string/0 +mem/0: new alloc: 1000 +mem/0: array size is 30 +run/0: instruction integer-to-decimal-string/1 +run/0: product 0 is -1 +mem/0: storing -1 in location 1002 +run/0: instruction integer-to-decimal-string/3 +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: ingredient 0 is 0 +mem/0: storing 0 in location 1004 +run/0: instruction integer-to-decimal-string/9 +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 +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: ingredient 0 is 1 +mem/0: storing 1 in location 1004 +run/0: instruction integer-to-decimal-string/12 +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: instruction init-buffer/0 +mem/0: new alloc: 1030 +mem/0: array size is 30 +run/0: instruction init-buffer/1 +mem/0: new alloc: 1060 +mem/0: storing 1060 in location 1032 +run/0: instruction init-buffer/2 +run/0: ingredient 0 is result +mem/0: location 1032 is 1060 +run/0: ingredient 1 is length +run/0: address to copy is 1060 +run/0: product 0 is 1060 +mem/0: storing 1060 in location 1033 +run/0: instruction init-buffer/3 +run/0: ingredient 0 is 0 +mem/0: location 1033 is 1060 +mem/0: storing 0 in location 1060 +run/0: instruction init-buffer/4 +run/0: ingredient 0 is result +mem/0: location 1032 is 1060 +run/0: ingredient 1 is data +run/0: address to copy is 1061 +run/0: product 0 is 1061 +mem/0: storing 1061 in location 1034 +run/0: instruction init-buffer/5 +run/0: product 0 is 30 +mem/0: storing 30 in location 1035 +run/0: instruction init-buffer/6 +mem/0: new alloc: 1062 +mem/0: location 1034 is 1061 +mem/0: storing 1062 in location 1061 +mem/0: location 1035 is 30 +mem/0: array size is 30 +run/0: instruction init-buffer/7 +mem/0: location 1032 is 1060 +run/0: result 0 is 1060 +mem/0: storing 1060 in location 1006 +run/0: instruction integer-to-decimal-string/15 +run/0: ingredient 0 is 48 +mem/0: storing 48 in location 1007 +run/0: instruction integer-to-decimal-string/17 +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 +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: 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: 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 +mem/0: location 1006 is 1060 +mem/0: location 1010 is 49 +run/0: instruction buffer-append/0 +mem/0: new alloc: 1092 +mem/0: array size is 30 +run/0: instruction buffer-append/1 +run/0: product 0 is 1060 +mem/0: storing 1060 in location 1094 +run/0: instruction buffer-append/2 +run/0: product 0 is 49 +mem/0: storing 49 in location 1095 +run/0: instruction buffer-append/4 +mem/0: location 1094 is 1060 +run/0: instruction buffer-full?/0 +mem/0: new alloc: 1122 +mem/0: array size is 30 +run/0: instruction buffer-full?/1 +run/0: product 0 is 1060 +mem/0: storing 1060 in location 1124 +run/0: instruction buffer-full?/2 +run/0: ingredient 0 is in +mem/0: location 1124 is 1060 +run/0: ingredient 1 is length +run/0: address to copy is 1060 +run/0: its type is 1 +mem/0: location 1060 is 0 +run/0: product 0 is 0 +mem/0: storing 0 in location 1125 +run/0: instruction buffer-full?/3 +run/0: ingredient 0 is in +mem/0: location 1124 is 1060 +run/0: ingredient 1 is data +run/0: address to copy is 1061 +run/0: its type is 2 +mem/0: location 1061 is 1062 +run/0: product 0 is 1062 +mem/0: storing 1062 in location 1126 +run/0: instruction buffer-full?/4 +mem/0: location 1126 is 1062 +mem/0: storing 30 in location 1127 +run/0: instruction buffer-full?/5 +run/0: ingredient 0 is len +mem/0: location 1125 is 0 +run/0: ingredient 1 is capacity +mem/0: location 1127 is 30 +run/0: product 0 is 0 +mem/0: storing 0 in location 1128 +run/0: instruction buffer-full?/6 +mem/0: location 1128 is 0 +run/0: result 0 is 0 +mem/0: storing 0 in location 1096 +run/0: instruction buffer-append/5 +mem/0: location 1096 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: ingredient 0 is in +mem/0: location 1094 is 1060 +run/0: ingredient 1 is length +run/0: address to copy is 1060 +run/0: product 0 is 1060 +mem/0: storing 1060 in location 1097 +run/0: instruction buffer-append/9 +run/0: ingredient 0 is in +mem/0: location 1094 is 1060 +run/0: ingredient 1 is data +run/0: address to copy is 1061 +run/0: its type is 2 +mem/0: location 1061 is 1062 +run/0: product 0 is 1062 +mem/0: storing 1062 in location 1098 +run/0: instruction buffer-append/10 +run/0: ingredient 0 is s +mem/0: location 1098 is 1062 +run/0: ingredient 1 is {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]} +mem/0: location 1097 is 1060 +mem/0: location 1060 is 0 +run/0: address to copy is 1063 +run/0: product 0 is 1063 +mem/0: storing 1063 in location 1099 +run/0: instruction buffer-append/11 +run/0: ingredient 0 is c +mem/0: location 1095 is 49 +mem/0: location 1099 is 1063 +mem/0: storing 49 in location 1063 +run/0: instruction buffer-append/12 +run/0: ingredient 0 is len +mem/0: location 1097 is 1060 +mem/0: location 1060 is 0 +run/0: ingredient 1 is 1 +run/0: product 0 is 1 +mem/0: location 1097 is 1060 +mem/0: storing 1 in location 1060 +run/0: instruction buffer-append/13 +mem/0: location 1094 is 1060 +run/0: result 0 is 1060 +mem/0: storing 1060 in location 1006 +run/0: instruction integer-to-decimal-string/22 +run/0: ingredient 0 is -6 +run/0: pc now 16 +run/0: instruction integer-to-decimal-string/17 +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 +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 +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 +mem/0: location 1006 is 1060 +run/0: instruction buffer-append/0 +mem/0: new alloc: 1152 +mem/0: array size is 30 +run/0: instruction buffer-append/1 +run/0: product 0 is 1060 +mem/0: storing 1060 in location 1154 +run/0: instruction buffer-append/2 +run/0: product 0 is 45 +mem/0: storing 45 in location 1155 +run/0: instruction buffer-append/4 +mem/0: location 1154 is 1060 +run/0: instruction buffer-full?/0 +mem/0: new alloc: 1182 +mem/0: array size is 30 +run/0: instruction buffer-full?/1 +run/0: product 0 is 1060 +mem/0: storing 1060 in location 1184 +run/0: instruction buffer-full?/2 +run/0: ingredient 0 is in +mem/0: location 1184 is 1060 +run/0: ingredient 1 is length +run/0: address to copy is 1060 +run/0: its type is 1 +mem/0: location 1060 is 1 +run/0: product 0 is 1 +mem/0: storing 1 in location 1185 +run/0: instruction buffer-full?/3 +run/0: ingredient 0 is in +mem/0: location 1184 is 1060 +run/0: ingredient 1 is data +run/0: address to copy is 1061 +run/0: its type is 2 +mem/0: location 1061 is 1062 +run/0: product 0 is 1062 +mem/0: storing 1062 in location 1186 +run/0: instruction buffer-full?/4 +mem/0: location 1186 is 1062 +mem/0: storing 30 in location 1187 +run/0: instruction buffer-full?/5 +run/0: ingredient 0 is len +mem/0: location 1185 is 1 +run/0: ingredient 1 is capacity +mem/0: location 1187 is 30 +run/0: product 0 is 0 +mem/0: storing 0 in location 1188 +run/0: instruction buffer-full?/6 +mem/0: location 1188 is 0 +run/0: result 0 is 0 +mem/0: storing 0 in location 1156 +run/0: instruction buffer-append/5 +mem/0: location 1156 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: ingredient 0 is in +mem/0: location 1154 is 1060 +run/0: ingredient 1 is length +run/0: address to copy is 1060 +run/0: product 0 is 1060 +mem/0: storing 1060 in location 1157 +run/0: instruction buffer-append/9 +run/0: ingredient 0 is in +mem/0: location 1154 is 1060 +run/0: ingredient 1 is data +run/0: address to copy is 1061 +run/0: its type is 2 +mem/0: location 1061 is 1062 +run/0: product 0 is 1062 +mem/0: storing 1062 in location 1158 +run/0: instruction buffer-append/10 +run/0: ingredient 0 is s +mem/0: location 1158 is 1062 +run/0: ingredient 1 is {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]} +mem/0: location 1157 is 1060 +mem/0: location 1060 is 1 +run/0: address to copy is 1064 +run/0: product 0 is 1064 +mem/0: storing 1064 in location 1159 +run/0: instruction buffer-append/11 +run/0: ingredient 0 is c +mem/0: location 1155 is 45 +mem/0: location 1159 is 1064 +mem/0: storing 45 in location 1064 +run/0: instruction buffer-append/12 +run/0: ingredient 0 is len +mem/0: location 1157 is 1060 +mem/0: location 1060 is 1 +run/0: ingredient 1 is 1 +run/0: product 0 is 2 +mem/0: location 1157 is 1060 +mem/0: storing 2 in location 1060 +run/0: instruction buffer-append/13 +mem/0: location 1154 is 1060 +run/0: result 0 is 1060 +mem/0: storing 1060 in location 1006 +run/0: instruction integer-to-decimal-string/28 +run/0: ingredient 0 is tmp +mem/0: location 1006 is 1060 +run/0: ingredient 1 is length +run/0: address to copy is 1060 +run/0: its type is 1 +mem/0: location 1060 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: ingredient 0 is tmp +mem/0: location 1006 is 1060 +run/0: ingredient 1 is data +run/0: address to copy is 1061 +run/0: its type is 2 +mem/0: location 1061 is 1062 +run/0: product 0 is 1062 +mem/0: storing 1062 in location 1012 +run/0: instruction integer-to-decimal-string/30 +mem/0: new alloc: 1212 +mem/0: storing 1212 in location 1003 +mem/0: location 1011 is 2 +mem/0: array size is 2 +run/0: instruction integer-to-decimal-string/31 +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: ingredient 0 is 0 +mem/0: storing 0 in location 1014 +run/0: instruction integer-to-decimal-string/34 +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 +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: ingredient 0 is {name: "buf", value: 11, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]} +mem/0: location 1012 is 1062 +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 1064 +run/0: its type is 4 +mem/0: location 1064 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: ingredient 0 is result +mem/0: location 1003 is 1212 +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 1213 +run/0: product 0 is 1213 +mem/0: storing 1213 in location 1016 +run/0: instruction integer-to-decimal-string/38 +run/0: ingredient 0 is src +mem/0: location 1015 is 45 +mem/0: location 1016 is 1213 +mem/0: storing 45 in location 1213 +run/0: instruction integer-to-decimal-string/39 +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: 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: ingredient 0 is -8 +run/0: pc now 33 +run/0: instruction integer-to-decimal-string/34 +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 +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: ingredient 0 is {name: "buf", value: 11, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]} +mem/0: location 1012 is 1062 +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 1063 +run/0: its type is 4 +mem/0: location 1063 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: ingredient 0 is result +mem/0: location 1003 is 1212 +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 1214 +run/0: product 0 is 1214 +mem/0: storing 1214 in location 1016 +run/0: instruction integer-to-decimal-string/38 +run/0: ingredient 0 is src +mem/0: location 1015 is 49 +mem/0: location 1016 is 1214 +mem/0: storing 49 in location 1214 +run/0: instruction integer-to-decimal-string/39 +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: 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: ingredient 0 is -8 +run/0: pc now 33 +run/0: instruction integer-to-decimal-string/34 +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 +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 +mem/0: location 1003 is 1212 +run/0: result 0 is 1212 +mem/0: storing 1212 in location 1 +run/0: instruction test-integer-to-decimal-digit-negative/1 +run/0: ingredient 0 is 1 +mem/0: location 1 is 1212 +mem/0: location 1212 is 2 +mem/0: location 1213 is 45 +mem/0: location 1214 is 49 +mem/0: storing 2 in location 2 +mem/0: storing 45 in location 3 +mem/0: storing 49 in location 4 diff --git a/cpp/.traces/integer-to-decimal-digit-positive b/cpp/.traces/integer-to-decimal-digit-positive new file mode 100644 index 00000000..70cc577f --- /dev/null +++ b/cpp/.traces/integer-to-decimal-digit-positive @@ -0,0 +1,675 @@ +parse/0: instruction: 105 +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: 1 +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 test-integer-to-decimal-digit-positive +after-brace/0: integer-to-decimal-string ... +after-brace/0: copy ... +run/0: instruction test-integer-to-decimal-digit-positive/0 +run/0: instruction integer-to-decimal-string/0 +mem/0: new alloc: 1000 +mem/0: array size is 30 +run/0: instruction integer-to-decimal-string/1 +run/0: product 0 is 234 +mem/0: storing 234 in location 1002 +run/0: instruction integer-to-decimal-string/3 +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: ingredient 0 is 0 +mem/0: storing 0 in location 1004 +run/0: instruction integer-to-decimal-string/9 +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 +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: instruction init-buffer/0 +mem/0: new alloc: 1030 +mem/0: array size is 30 +run/0: instruction init-buffer/1 +mem/0: new alloc: 1060 +mem/0: storing 1060 in location 1032 +run/0: instruction init-buffer/2 +run/0: ingredient 0 is result +mem/0: location 1032 is 1060 +run/0: ingredient 1 is length +run/0: address to copy is 1060 +run/0: product 0 is 1060 +mem/0: storing 1060 in location 1033 +run/0: instruction init-buffer/3 +run/0: ingredient 0 is 0 +mem/0: location 1033 is 1060 +mem/0: storing 0 in location 1060 +run/0: instruction init-buffer/4 +run/0: ingredient 0 is result +mem/0: location 1032 is 1060 +run/0: ingredient 1 is data +run/0: address to copy is 1061 +run/0: product 0 is 1061 +mem/0: storing 1061 in location 1034 +run/0: instruction init-buffer/5 +run/0: product 0 is 30 +mem/0: storing 30 in location 1035 +run/0: instruction init-buffer/6 +mem/0: new alloc: 1062 +mem/0: location 1034 is 1061 +mem/0: storing 1062 in location 1061 +mem/0: location 1035 is 30 +mem/0: array size is 30 +run/0: instruction init-buffer/7 +mem/0: location 1032 is 1060 +run/0: result 0 is 1060 +mem/0: storing 1060 in location 1006 +run/0: instruction integer-to-decimal-string/15 +run/0: ingredient 0 is 48 +mem/0: storing 48 in location 1007 +run/0: instruction integer-to-decimal-string/17 +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 +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: 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: 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 +mem/0: location 1006 is 1060 +mem/0: location 1010 is 52 +run/0: instruction buffer-append/0 +mem/0: new alloc: 1092 +mem/0: array size is 30 +run/0: instruction buffer-append/1 +run/0: product 0 is 1060 +mem/0: storing 1060 in location 1094 +run/0: instruction buffer-append/2 +run/0: product 0 is 52 +mem/0: storing 52 in location 1095 +run/0: instruction buffer-append/4 +mem/0: location 1094 is 1060 +run/0: instruction buffer-full?/0 +mem/0: new alloc: 1122 +mem/0: array size is 30 +run/0: instruction buffer-full?/1 +run/0: product 0 is 1060 +mem/0: storing 1060 in location 1124 +run/0: instruction buffer-full?/2 +run/0: ingredient 0 is in +mem/0: location 1124 is 1060 +run/0: ingredient 1 is length +run/0: address to copy is 1060 +run/0: its type is 1 +mem/0: location 1060 is 0 +run/0: product 0 is 0 +mem/0: storing 0 in location 1125 +run/0: instruction buffer-full?/3 +run/0: ingredient 0 is in +mem/0: location 1124 is 1060 +run/0: ingredient 1 is data +run/0: address to copy is 1061 +run/0: its type is 2 +mem/0: location 1061 is 1062 +run/0: product 0 is 1062 +mem/0: storing 1062 in location 1126 +run/0: instruction buffer-full?/4 +mem/0: location 1126 is 1062 +mem/0: storing 30 in location 1127 +run/0: instruction buffer-full?/5 +run/0: ingredient 0 is len +mem/0: location 1125 is 0 +run/0: ingredient 1 is capacity +mem/0: location 1127 is 30 +run/0: product 0 is 0 +mem/0: storing 0 in location 1128 +run/0: instruction buffer-full?/6 +mem/0: location 1128 is 0 +run/0: result 0 is 0 +mem/0: storing 0 in location 1096 +run/0: instruction buffer-append/5 +mem/0: location 1096 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: ingredient 0 is in +mem/0: location 1094 is 1060 +run/0: ingredient 1 is length +run/0: address to copy is 1060 +run/0: product 0 is 1060 +mem/0: storing 1060 in location 1097 +run/0: instruction buffer-append/9 +run/0: ingredient 0 is in +mem/0: location 1094 is 1060 +run/0: ingredient 1 is data +run/0: address to copy is 1061 +run/0: its type is 2 +mem/0: location 1061 is 1062 +run/0: product 0 is 1062 +mem/0: storing 1062 in location 1098 +run/0: instruction buffer-append/10 +run/0: ingredient 0 is s +mem/0: location 1098 is 1062 +run/0: ingredient 1 is {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]} +mem/0: location 1097 is 1060 +mem/0: location 1060 is 0 +run/0: address to copy is 1063 +run/0: product 0 is 1063 +mem/0: storing 1063 in location 1099 +run/0: instruction buffer-append/11 +run/0: ingredient 0 is c +mem/0: location 1095 is 52 +mem/0: location 1099 is 1063 +mem/0: storing 52 in location 1063 +run/0: instruction buffer-append/12 +run/0: ingredient 0 is len +mem/0: location 1097 is 1060 +mem/0: location 1060 is 0 +run/0: ingredient 1 is 1 +run/0: product 0 is 1 +mem/0: location 1097 is 1060 +mem/0: storing 1 in location 1060 +run/0: instruction buffer-append/13 +mem/0: location 1094 is 1060 +run/0: result 0 is 1060 +mem/0: storing 1060 in location 1006 +run/0: instruction integer-to-decimal-string/22 +run/0: ingredient 0 is -6 +run/0: pc now 16 +run/0: instruction integer-to-decimal-string/17 +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 +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: 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: 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 +mem/0: location 1006 is 1060 +mem/0: location 1010 is 51 +run/0: instruction buffer-append/0 +mem/0: new alloc: 1152 +mem/0: array size is 30 +run/0: instruction buffer-append/1 +run/0: product 0 is 1060 +mem/0: storing 1060 in location 1154 +run/0: instruction buffer-append/2 +run/0: product 0 is 51 +mem/0: storing 51 in location 1155 +run/0: instruction buffer-append/4 +mem/0: location 1154 is 1060 +run/0: instruction buffer-full?/0 +mem/0: new alloc: 1182 +mem/0: array size is 30 +run/0: instruction buffer-full?/1 +run/0: product 0 is 1060 +mem/0: storing 1060 in location 1184 +run/0: instruction buffer-full?/2 +run/0: ingredient 0 is in +mem/0: location 1184 is 1060 +run/0: ingredient 1 is length +run/0: address to copy is 1060 +run/0: its type is 1 +mem/0: location 1060 is 1 +run/0: product 0 is 1 +mem/0: storing 1 in location 1185 +run/0: instruction buffer-full?/3 +run/0: ingredient 0 is in +mem/0: location 1184 is 1060 +run/0: ingredient 1 is data +run/0: address to copy is 1061 +run/0: its type is 2 +mem/0: location 1061 is 1062 +run/0: product 0 is 1062 +mem/0: storing 1062 in location 1186 +run/0: instruction buffer-full?/4 +mem/0: location 1186 is 1062 +mem/0: storing 30 in location 1187 +run/0: instruction buffer-full?/5 +run/0: ingredient 0 is len +mem/0: location 1185 is 1 +run/0: ingredient 1 is capacity +mem/0: location 1187 is 30 +run/0: product 0 is 0 +mem/0: storing 0 in location 1188 +run/0: instruction buffer-full?/6 +mem/0: location 1188 is 0 +run/0: result 0 is 0 +mem/0: storing 0 in location 1156 +run/0: instruction buffer-append/5 +mem/0: location 1156 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: ingredient 0 is in +mem/0: location 1154 is 1060 +run/0: ingredient 1 is length +run/0: address to copy is 1060 +run/0: product 0 is 1060 +mem/0: storing 1060 in location 1157 +run/0: instruction buffer-append/9 +run/0: ingredient 0 is in +mem/0: location 1154 is 1060 +run/0: ingredient 1 is data +run/0: address to copy is 1061 +run/0: its type is 2 +mem/0: location 1061 is 1062 +run/0: product 0 is 1062 +mem/0: storing 1062 in location 1158 +run/0: instruction buffer-append/10 +run/0: ingredient 0 is s +mem/0: location 1158 is 1062 +run/0: ingredient 1 is {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]} +mem/0: location 1157 is 1060 +mem/0: location 1060 is 1 +run/0: address to copy is 1064 +run/0: product 0 is 1064 +mem/0: storing 1064 in location 1159 +run/0: instruction buffer-append/11 +run/0: ingredient 0 is c +mem/0: location 1155 is 51 +mem/0: location 1159 is 1064 +mem/0: storing 51 in location 1064 +run/0: instruction buffer-append/12 +run/0: ingredient 0 is len +mem/0: location 1157 is 1060 +mem/0: location 1060 is 1 +run/0: ingredient 1 is 1 +run/0: product 0 is 2 +mem/0: location 1157 is 1060 +mem/0: storing 2 in location 1060 +run/0: instruction buffer-append/13 +mem/0: location 1154 is 1060 +run/0: result 0 is 1060 +mem/0: storing 1060 in location 1006 +run/0: instruction integer-to-decimal-string/22 +run/0: ingredient 0 is -6 +run/0: pc now 16 +run/0: instruction integer-to-decimal-string/17 +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 +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: 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: 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 +mem/0: location 1006 is 1060 +mem/0: location 1010 is 50 +run/0: instruction buffer-append/0 +mem/0: new alloc: 1212 +mem/0: array size is 30 +run/0: instruction buffer-append/1 +run/0: product 0 is 1060 +mem/0: storing 1060 in location 1214 +run/0: instruction buffer-append/2 +run/0: product 0 is 50 +mem/0: storing 50 in location 1215 +run/0: instruction buffer-append/4 +mem/0: location 1214 is 1060 +run/0: instruction buffer-full?/0 +mem/0: new alloc: 1242 +mem/0: array size is 30 +run/0: instruction buffer-full?/1 +run/0: product 0 is 1060 +mem/0: storing 1060 in location 1244 +run/0: instruction buffer-full?/2 +run/0: ingredient 0 is in +mem/0: location 1244 is 1060 +run/0: ingredient 1 is length +run/0: address to copy is 1060 +run/0: its type is 1 +mem/0: location 1060 is 2 +run/0: product 0 is 2 +mem/0: storing 2 in location 1245 +run/0: instruction buffer-full?/3 +run/0: ingredient 0 is in +mem/0: location 1244 is 1060 +run/0: ingredient 1 is data +run/0: address to copy is 1061 +run/0: its type is 2 +mem/0: location 1061 is 1062 +run/0: product 0 is 1062 +mem/0: storing 1062 in location 1246 +run/0: instruction buffer-full?/4 +mem/0: location 1246 is 1062 +mem/0: storing 30 in location 1247 +run/0: instruction buffer-full?/5 +run/0: ingredient 0 is len +mem/0: location 1245 is 2 +run/0: ingredient 1 is capacity +mem/0: location 1247 is 30 +run/0: product 0 is 0 +mem/0: storing 0 in location 1248 +run/0: instruction buffer-full?/6 +mem/0: location 1248 is 0 +run/0: result 0 is 0 +mem/0: storing 0 in location 1216 +run/0: instruction buffer-append/5 +mem/0: location 1216 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: ingredient 0 is in +mem/0: location 1214 is 1060 +run/0: ingredient 1 is length +run/0: address to copy is 1060 +run/0: product 0 is 1060 +mem/0: storing 1060 in location 1217 +run/0: instruction buffer-append/9 +run/0: ingredient 0 is in +mem/0: location 1214 is 1060 +run/0: ingredient 1 is data +run/0: address to copy is 1061 +run/0: its type is 2 +mem/0: location 1061 is 1062 +run/0: product 0 is 1062 +mem/0: storing 1062 in location 1218 +run/0: instruction buffer-append/10 +run/0: ingredient 0 is s +mem/0: location 1218 is 1062 +run/0: ingredient 1 is {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]} +mem/0: location 1217 is 1060 +mem/0: location 1060 is 2 +run/0: address to copy is 1065 +run/0: product 0 is 1065 +mem/0: storing 1065 in location 1219 +run/0: instruction buffer-append/11 +run/0: ingredient 0 is c +mem/0: location 1215 is 50 +mem/0: location 1219 is 1065 +mem/0: storing 50 in location 1065 +run/0: instruction buffer-append/12 +run/0: ingredient 0 is len +mem/0: location 1217 is 1060 +mem/0: location 1060 is 2 +run/0: ingredient 1 is 1 +run/0: product 0 is 3 +mem/0: location 1217 is 1060 +mem/0: storing 3 in location 1060 +run/0: instruction buffer-append/13 +mem/0: location 1214 is 1060 +run/0: result 0 is 1060 +mem/0: storing 1060 in location 1006 +run/0: instruction integer-to-decimal-string/22 +run/0: ingredient 0 is -6 +run/0: pc now 16 +run/0: instruction integer-to-decimal-string/17 +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 +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 +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: ingredient 0 is tmp +mem/0: location 1006 is 1060 +run/0: ingredient 1 is length +run/0: address to copy is 1060 +run/0: its type is 1 +mem/0: location 1060 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: ingredient 0 is tmp +mem/0: location 1006 is 1060 +run/0: ingredient 1 is data +run/0: address to copy is 1061 +run/0: its type is 2 +mem/0: location 1061 is 1062 +run/0: product 0 is 1062 +mem/0: storing 1062 in location 1012 +run/0: instruction integer-to-decimal-string/30 +mem/0: new alloc: 1272 +mem/0: storing 1272 in location 1003 +mem/0: location 1011 is 3 +mem/0: array size is 3 +run/0: instruction integer-to-decimal-string/31 +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: ingredient 0 is 0 +mem/0: storing 0 in location 1014 +run/0: instruction integer-to-decimal-string/34 +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 +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: ingredient 0 is {name: "buf", value: 11, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]} +mem/0: location 1012 is 1062 +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 1065 +run/0: its type is 4 +mem/0: location 1065 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: ingredient 0 is result +mem/0: location 1003 is 1272 +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 1273 +run/0: product 0 is 1273 +mem/0: storing 1273 in location 1016 +run/0: instruction integer-to-decimal-string/38 +run/0: ingredient 0 is src +mem/0: location 1015 is 50 +mem/0: location 1016 is 1273 +mem/0: storing 50 in location 1273 +run/0: instruction integer-to-decimal-string/39 +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: 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: ingredient 0 is -8 +run/0: pc now 33 +run/0: instruction integer-to-decimal-string/34 +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 +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: ingredient 0 is {name: "buf", value: 11, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]} +mem/0: location 1012 is 1062 +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 1064 +run/0: its type is 4 +mem/0: location 1064 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: ingredient 0 is result +mem/0: location 1003 is 1272 +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 1274 +run/0: product 0 is 1274 +mem/0: storing 1274 in location 1016 +run/0: instruction integer-to-decimal-string/38 +run/0: ingredient 0 is src +mem/0: location 1015 is 51 +mem/0: location 1016 is 1274 +mem/0: storing 51 in location 1274 +run/0: instruction integer-to-decimal-string/39 +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: 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: ingredient 0 is -8 +run/0: pc now 33 +run/0: instruction integer-to-decimal-string/34 +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 +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: ingredient 0 is {name: "buf", value: 11, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]} +mem/0: location 1012 is 1062 +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 1063 +run/0: its type is 4 +mem/0: location 1063 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: ingredient 0 is result +mem/0: location 1003 is 1272 +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 1275 +run/0: product 0 is 1275 +mem/0: storing 1275 in location 1016 +run/0: instruction integer-to-decimal-string/38 +run/0: ingredient 0 is src +mem/0: location 1015 is 52 +mem/0: location 1016 is 1275 +mem/0: storing 52 in location 1275 +run/0: instruction integer-to-decimal-string/39 +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: 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: ingredient 0 is -8 +run/0: pc now 33 +run/0: instruction integer-to-decimal-string/34 +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 +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 +mem/0: location 1003 is 1272 +run/0: result 0 is 1272 +mem/0: storing 1272 in location 1 +run/0: instruction test-integer-to-decimal-digit-positive/1 +run/0: ingredient 0 is 1 +mem/0: location 1 is 1272 +mem/0: location 1272 is 3 +mem/0: location 1273 is 50 +mem/0: location 1274 is 51 +mem/0: location 1275 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 diff --git a/cpp/.traces/integer-to-decimal-digit-zero b/cpp/.traces/integer-to-decimal-digit-zero new file mode 100644 index 00000000..39d858e2 --- /dev/null +++ b/cpp/.traces/integer-to-decimal-digit-zero @@ -0,0 +1,33 @@ +parse/0: instruction: 105 +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: 1 +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 test-integer-to-decimal-digit-zero +after-brace/0: integer-to-decimal-string ... +after-brace/0: copy ... +run/0: instruction test-integer-to-decimal-digit-zero/0 +run/0: instruction integer-to-decimal-string/0 +mem/0: new alloc: 1000 +mem/0: array size is 30 +run/0: instruction integer-to-decimal-string/1 +run/0: product 0 is 0 +mem/0: storing 0 in location 1002 +run/0: instruction integer-to-decimal-string/3 +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 +mem/0: storing 1030 in location 1003 +run/0: instruction integer-to-decimal-string/5 +mem/0: location 1003 is 1030 +run/0: result 0 is 1030 +mem/0: storing 1030 in location 1 +run/0: instruction test-integer-to-decimal-digit-zero/1 +run/0: ingredient 0 is 1 +mem/0: location 1 is 1030 +mem/0: location 1030 is 1 +mem/0: location 1031 is 48 +mem/0: storing 1 in location 2 +mem/0: storing 48 in location 3 diff --git a/cpp/.traces/lesser_than b/cpp/.traces/less_than index 9628c081..0d6b4b80 100644 --- a/cpp/.traces/lesser_than +++ b/cpp/.traces/less_than @@ -11,7 +11,7 @@ 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 ... +after-brace/0: less-than ... run/0: instruction main/0 run/0: ingredient 0 is 32 mem/0: storing 32 in location 1 diff --git a/cpp/.traces/lesser_than2 b/cpp/.traces/less_than2 index dc373a53..d747f82f 100644 --- a/cpp/.traces/lesser_than2 +++ b/cpp/.traces/less_than2 @@ -11,7 +11,7 @@ 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 ... +after-brace/0: less-than ... run/0: instruction main/0 run/0: ingredient 0 is 34 mem/0: storing 34 in location 1 diff --git a/cpp/021arithmetic b/cpp/021arithmetic index 6f7fb1f3..a5ca095a 100644 --- a/cpp/021arithmetic +++ b/cpp/021arithmetic @@ -177,7 +177,7 @@ recipe main [ :(before "End Primitive Recipe Declarations") DIVIDE_WITH_REMAINDER, :(before "End Primitive Recipe Numbers") -Recipe_number["divide_with_remainder"] = DIVIDE_WITH_REMAINDER; +Recipe_number["divide-with-remainder"] = DIVIDE_WITH_REMAINDER; :(before "End Primitive Recipe Implementations") case DIVIDE_WITH_REMAINDER: { trace("run") << "ingredient 0 is " << instructions[pc].ingredients[0].name; @@ -199,7 +199,7 @@ case DIVIDE_WITH_REMAINDER: { :(scenario "divide_with_remainder_literal") recipe main [ - 1:integer, 2:integer <- divide_with_remainder 9:literal, 2:literal + 1:integer, 2:integer <- divide-with-remainder 9:literal, 2:literal ] +run: instruction main/0 +run: ingredient 0 is 9 @@ -213,7 +213,7 @@ recipe main [ recipe main [ 1:integer <- copy 27:literal 2:integer <- copy 11:literal - 3:integer, 4:integer <- divide_with_remainder 1:integer, 2:integer + 3:integer, 4:integer <- divide-with-remainder 1:integer, 2:integer ] +run: instruction main/2 +run: ingredient 0 is 1 diff --git a/cpp/024compare b/cpp/024compare index f39f4941..1484649b 100644 --- a/cpp/024compare +++ b/cpp/024compare @@ -93,11 +93,11 @@ recipe main [ +mem: storing 0 in location 3 :(before "End Primitive Recipe Declarations") -LESSER_THAN, +LESS_THAN, :(before "End Primitive Recipe Numbers") -Recipe_number["lesser-than"] = LESSER_THAN; +Recipe_number["less-than"] = LESS_THAN; :(before "End Primitive Recipe Implementations") -case LESSER_THAN: { +case LESS_THAN: { trace("run") << "ingredient 0 is " << instructions[pc].ingredients[0].name; vector<int> arg0 = read_memory(instructions[pc].ingredients[0]); assert(arg0.size() == 1); @@ -111,11 +111,11 @@ case LESSER_THAN: { break; } -:(scenario "lesser_than") +:(scenario "less_than") recipe main [ 1:integer <- copy 32:literal 2:integer <- copy 33:literal - 3:integer <- lesser-than 1:integer, 2:integer + 3:integer <- less-than 1:integer, 2:integer ] +run: instruction main/2 +run: ingredient 0 is 1 @@ -125,11 +125,11 @@ recipe main [ +run: product 0 is 1 +mem: storing 1 in location 3 -:(scenario "lesser_than2") +:(scenario "less_than2") recipe main [ 1:integer <- copy 34:literal 2:integer <- copy 33:literal - 3:integer <- lesser-than 1:integer, 2:integer + 3:integer <- less-than 1:integer, 2:integer ] +run: instruction main/2 +run: ingredient 0 is 1 diff --git a/cpp/060string.mu b/cpp/060string.mu index a0d2757d..d81cdf13 100644 --- a/cpp/060string.mu +++ b/cpp/060string.mu @@ -230,3 +230,96 @@ scenario buffer-append-works [ 18 <- 0 ] ] + +# result:address:array:character <- integer-to-decimal-string n:integer +recipe integer-to-decimal-string [ + default-space:address:space <- new location:type, 30:literal + n:integer <- next-ingredient + # is it zero? + { + break-if n:integer + result:address:array:character <- new [0] + reply result:address:array:character + } + # save sign + negate-result:boolean <- copy 0:literal + { + negative?:boolean <- less-than n:integer, 0:literal + break-unless negative?:boolean + negate-result:boolean <- copy 1:literal + n:integer <- multiply n:integer -1:literal + } + # add digits from right to left into intermediate buffer + tmp:address:buffer <- init-buffer 30:literal + digit-base:integer <- copy 48:literal # '0' + { + done?:boolean <- equal n:integer, 0:literal + break-if done?:boolean + n:integer, digit:integer <- divide-with-remainder n:integer, 10:literal + c:character <- add digit-base:integer, digit:integer + tmp:address:buffer <- buffer-append tmp:address:buffer, c:character + loop + } + # add sign + { + break-unless negate-result:boolean + tmp:address:buffer <- buffer-append tmp:address:buffer, 45:literal # '-' + } + # reverse buffer into string result + len:integer <- get tmp:address:buffer/deref, length:offset + buf:address:array:character <- get tmp:address:buffer/deref data:offset + result:address:array:character <- new character:type, len:integer + i:integer <- subtract len:integer, 1:literal + j:integer <- copy 0:literal + { + # while i >= 0 + done?:boolean <- less-than i:integer, 0:literal + break-if done?:boolean + # result[j] = tmp[i] + src:character <- index buf:address:array:character/deref, i:integer + dest:address:character <- index-address result:address:array:character/deref, j:integer + dest:address:character/deref <- copy src:character + # ++i + i:integer <- subtract i:integer, 1:literal + # --j + j:integer <- add j:integer, 1:literal + loop + } + reply result:address:array:character +] + +scenario integer-to-decimal-digit-zero [ + run [ + 1:address:array:character/raw <- integer-to-decimal-string 0:literal + 2:array:character/raw <- copy 1:address:array:character/deref/raw + ] + memory should contain [ + 2 <- 1 + 3 <- 48 # '0' + ] +] + +scenario integer-to-decimal-digit-positive [ + run [ + 1:address:array:character/raw <- integer-to-decimal-string 234:literal + 2:array:character/raw <- copy 1:address:array:character/deref/raw + ] + memory should contain [ + 2 <- 3 + 3 <- 50 # '2' + 4 <- 51 # '3' + 5 <- 52 # '4' + ] +] + +scenario integer-to-decimal-digit-negative [ + run [ + 1:address:array:character/raw <- integer-to-decimal-string -1:literal + 2:array:character/raw <- copy 1:address:array:character/deref/raw + ] + memory should contain [ + 2 <- 2 + 3 <- 45 # '-' + 4 <- 49 # '1' + ] +] |