diff options
-rw-r--r-- | cpp/.traces/string-append-1 | 759 | ||||
-rw-r--r-- | cpp/060string.mu | 70 |
2 files changed, 829 insertions, 0 deletions
diff --git a/cpp/.traces/string-append-1 b/cpp/.traces/string-append-1 new file mode 100644 index 00000000..6af54b66 --- /dev/null +++ b/cpp/.traces/string-append-1 @@ -0,0 +1,759 @@ +parse/0: instruction: 33 +parse/0: ingredient: {name: "hello,", value: 0, type: 0, properties: ["hello,": "literal-string"]} +parse/0: product: {name: "1", value: 0, type: 2-5-4, properties: ["1": "address":"array":"character", "raw": ]} +parse/0: instruction: 33 +parse/0: ingredient: {name: " world!", value: 0, type: 0, properties: [" world!": "literal-string"]} +parse/0: product: {name: "2", value: 0, type: 2-5-4, properties: ["2": "address":"array":"character", "raw": ]} +parse/0: instruction: 106 +parse/0: ingredient: {name: "1", value: 0, type: 2-5-4, properties: ["1": "address":"array":"character", "raw": ]} +parse/0: ingredient: {name: "2", value: 0, type: 2-5-4, properties: ["2": "address":"array":"character", "raw": ]} +parse/0: product: {name: "3", value: 0, type: 2-5-4, properties: ["3": "address":"array":"character", "raw": ]} +parse/0: instruction: 1 +parse/0: ingredient: {name: "3", value: 0, type: 2-5-4, properties: ["3": "address":"array":"character", "raw": , "deref": ]} +parse/0: product: {name: "4", value: 0, type: 5-4, properties: ["4": "array":"character", "raw": ]} +new/0: hello, -> 0 +new/0: world! -> 0 +after-brace/0: recipe test-string-append-1 +after-brace/0: new ... +after-brace/0: new ... +after-brace/0: string-append ... +after-brace/0: copy ... +run/0: instruction test-string-append-1/0 +mem/0: storing 1000 in location 1 +run/0: instruction test-string-append-1/1 +mem/0: storing 1007 in location 2 +run/0: instruction test-string-append-1/2 +mem/0: location 1 is 1000 +mem/0: location 2 is 1007 +run/0: instruction string-append/0 +mem/0: new alloc: 1015 +mem/0: array size is 30 +run/0: instruction string-append/1 +run/0: product 0 is 1000 +mem/0: storing 1000 in location 1017 +run/0: instruction string-append/2 +mem/0: location 1017 is 1000 +mem/0: storing 6 in location 1018 +run/0: instruction string-append/3 +run/0: product 0 is 1007 +mem/0: storing 1007 in location 1019 +run/0: instruction string-append/4 +mem/0: location 1019 is 1007 +mem/0: storing 7 in location 1020 +run/0: instruction string-append/5 +run/0: ingredient 0 is a-len +mem/0: location 1018 is 6 +run/0: ingredient 1 is b-len +mem/0: location 1020 is 7 +run/0: product 0 is 13 +mem/0: storing 13 in location 1021 +run/0: instruction string-append/6 +mem/0: new alloc: 1045 +mem/0: storing 1045 in location 1022 +mem/0: location 1021 is 13 +mem/0: array size is 13 +run/0: instruction string-append/7 +run/0: ingredient 0 is 0 +mem/0: storing 0 in location 1023 +run/0: instruction string-append/8 +run/0: ingredient 0 is 0 +mem/0: storing 0 in location 1024 +run/0: instruction string-append/10 +run/0: ingredient 0 is i +mem/0: location 1024 is 0 +run/0: ingredient 1 is a-len +mem/0: location 1018 is 6 +run/0: product 0 is 0 +mem/0: storing 0 in location 1025 +run/0: instruction string-append/11 +mem/0: location 1025 is 0 +run/0: ingredient 0 is 0 +run/0: jump-if fell through +run/0: instruction string-append/12 +run/0: ingredient 0 is result +mem/0: location 1022 is 1045 +run/0: ingredient 1 is {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]} +mem/0: location 1023 is 0 +run/0: address to copy is 1046 +run/0: product 0 is 1046 +mem/0: storing 1046 in location 1026 +run/0: instruction string-append/13 +run/0: ingredient 0 is {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]} +mem/0: location 1017 is 1000 +run/0: ingredient 1 is {name: "i", value: 8, type: 1, properties: ["i": "integer"]} +mem/0: location 1024 is 0 +run/0: address to copy is 1001 +run/0: its type is 4 +mem/0: location 1001 is 104 +run/0: product 0 is 104 +mem/0: storing 104 in location 1027 +run/0: instruction string-append/14 +run/0: ingredient 0 is in +mem/0: location 1027 is 104 +mem/0: location 1026 is 1046 +mem/0: storing 104 in location 1046 +run/0: instruction string-append/15 +run/0: ingredient 0 is i +mem/0: location 1024 is 0 +run/0: ingredient 1 is 1 +run/0: product 0 is 1 +mem/0: storing 1 in location 1024 +run/0: instruction string-append/16 +run/0: ingredient 0 is result-idx +mem/0: location 1023 is 0 +run/0: ingredient 1 is 1 +run/0: product 0 is 1 +mem/0: storing 1 in location 1023 +run/0: instruction string-append/17 +run/0: ingredient 0 is -8 +run/0: pc now 9 +run/0: instruction string-append/10 +run/0: ingredient 0 is i +mem/0: location 1024 is 1 +run/0: ingredient 1 is a-len +mem/0: location 1018 is 6 +run/0: product 0 is 0 +mem/0: storing 0 in location 1025 +run/0: instruction string-append/11 +mem/0: location 1025 is 0 +run/0: ingredient 0 is 0 +run/0: jump-if fell through +run/0: instruction string-append/12 +run/0: ingredient 0 is result +mem/0: location 1022 is 1045 +run/0: ingredient 1 is {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]} +mem/0: location 1023 is 1 +run/0: address to copy is 1047 +run/0: product 0 is 1047 +mem/0: storing 1047 in location 1026 +run/0: instruction string-append/13 +run/0: ingredient 0 is {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]} +mem/0: location 1017 is 1000 +run/0: ingredient 1 is {name: "i", value: 8, type: 1, properties: ["i": "integer"]} +mem/0: location 1024 is 1 +run/0: address to copy is 1002 +run/0: its type is 4 +mem/0: location 1002 is 101 +run/0: product 0 is 101 +mem/0: storing 101 in location 1027 +run/0: instruction string-append/14 +run/0: ingredient 0 is in +mem/0: location 1027 is 101 +mem/0: location 1026 is 1047 +mem/0: storing 101 in location 1047 +run/0: instruction string-append/15 +run/0: ingredient 0 is i +mem/0: location 1024 is 1 +run/0: ingredient 1 is 1 +run/0: product 0 is 2 +mem/0: storing 2 in location 1024 +run/0: instruction string-append/16 +run/0: ingredient 0 is result-idx +mem/0: location 1023 is 1 +run/0: ingredient 1 is 1 +run/0: product 0 is 2 +mem/0: storing 2 in location 1023 +run/0: instruction string-append/17 +run/0: ingredient 0 is -8 +run/0: pc now 9 +run/0: instruction string-append/10 +run/0: ingredient 0 is i +mem/0: location 1024 is 2 +run/0: ingredient 1 is a-len +mem/0: location 1018 is 6 +run/0: product 0 is 0 +mem/0: storing 0 in location 1025 +run/0: instruction string-append/11 +mem/0: location 1025 is 0 +run/0: ingredient 0 is 0 +run/0: jump-if fell through +run/0: instruction string-append/12 +run/0: ingredient 0 is result +mem/0: location 1022 is 1045 +run/0: ingredient 1 is {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]} +mem/0: location 1023 is 2 +run/0: address to copy is 1048 +run/0: product 0 is 1048 +mem/0: storing 1048 in location 1026 +run/0: instruction string-append/13 +run/0: ingredient 0 is {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]} +mem/0: location 1017 is 1000 +run/0: ingredient 1 is {name: "i", value: 8, type: 1, properties: ["i": "integer"]} +mem/0: location 1024 is 2 +run/0: address to copy is 1003 +run/0: its type is 4 +mem/0: location 1003 is 108 +run/0: product 0 is 108 +mem/0: storing 108 in location 1027 +run/0: instruction string-append/14 +run/0: ingredient 0 is in +mem/0: location 1027 is 108 +mem/0: location 1026 is 1048 +mem/0: storing 108 in location 1048 +run/0: instruction string-append/15 +run/0: ingredient 0 is i +mem/0: location 1024 is 2 +run/0: ingredient 1 is 1 +run/0: product 0 is 3 +mem/0: storing 3 in location 1024 +run/0: instruction string-append/16 +run/0: ingredient 0 is result-idx +mem/0: location 1023 is 2 +run/0: ingredient 1 is 1 +run/0: product 0 is 3 +mem/0: storing 3 in location 1023 +run/0: instruction string-append/17 +run/0: ingredient 0 is -8 +run/0: pc now 9 +run/0: instruction string-append/10 +run/0: ingredient 0 is i +mem/0: location 1024 is 3 +run/0: ingredient 1 is a-len +mem/0: location 1018 is 6 +run/0: product 0 is 0 +mem/0: storing 0 in location 1025 +run/0: instruction string-append/11 +mem/0: location 1025 is 0 +run/0: ingredient 0 is 0 +run/0: jump-if fell through +run/0: instruction string-append/12 +run/0: ingredient 0 is result +mem/0: location 1022 is 1045 +run/0: ingredient 1 is {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]} +mem/0: location 1023 is 3 +run/0: address to copy is 1049 +run/0: product 0 is 1049 +mem/0: storing 1049 in location 1026 +run/0: instruction string-append/13 +run/0: ingredient 0 is {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]} +mem/0: location 1017 is 1000 +run/0: ingredient 1 is {name: "i", value: 8, type: 1, properties: ["i": "integer"]} +mem/0: location 1024 is 3 +run/0: address to copy is 1004 +run/0: its type is 4 +mem/0: location 1004 is 108 +run/0: product 0 is 108 +mem/0: storing 108 in location 1027 +run/0: instruction string-append/14 +run/0: ingredient 0 is in +mem/0: location 1027 is 108 +mem/0: location 1026 is 1049 +mem/0: storing 108 in location 1049 +run/0: instruction string-append/15 +run/0: ingredient 0 is i +mem/0: location 1024 is 3 +run/0: ingredient 1 is 1 +run/0: product 0 is 4 +mem/0: storing 4 in location 1024 +run/0: instruction string-append/16 +run/0: ingredient 0 is result-idx +mem/0: location 1023 is 3 +run/0: ingredient 1 is 1 +run/0: product 0 is 4 +mem/0: storing 4 in location 1023 +run/0: instruction string-append/17 +run/0: ingredient 0 is -8 +run/0: pc now 9 +run/0: instruction string-append/10 +run/0: ingredient 0 is i +mem/0: location 1024 is 4 +run/0: ingredient 1 is a-len +mem/0: location 1018 is 6 +run/0: product 0 is 0 +mem/0: storing 0 in location 1025 +run/0: instruction string-append/11 +mem/0: location 1025 is 0 +run/0: ingredient 0 is 0 +run/0: jump-if fell through +run/0: instruction string-append/12 +run/0: ingredient 0 is result +mem/0: location 1022 is 1045 +run/0: ingredient 1 is {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]} +mem/0: location 1023 is 4 +run/0: address to copy is 1050 +run/0: product 0 is 1050 +mem/0: storing 1050 in location 1026 +run/0: instruction string-append/13 +run/0: ingredient 0 is {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]} +mem/0: location 1017 is 1000 +run/0: ingredient 1 is {name: "i", value: 8, type: 1, properties: ["i": "integer"]} +mem/0: location 1024 is 4 +run/0: address to copy is 1005 +run/0: its type is 4 +mem/0: location 1005 is 111 +run/0: product 0 is 111 +mem/0: storing 111 in location 1027 +run/0: instruction string-append/14 +run/0: ingredient 0 is in +mem/0: location 1027 is 111 +mem/0: location 1026 is 1050 +mem/0: storing 111 in location 1050 +run/0: instruction string-append/15 +run/0: ingredient 0 is i +mem/0: location 1024 is 4 +run/0: ingredient 1 is 1 +run/0: product 0 is 5 +mem/0: storing 5 in location 1024 +run/0: instruction string-append/16 +run/0: ingredient 0 is result-idx +mem/0: location 1023 is 4 +run/0: ingredient 1 is 1 +run/0: product 0 is 5 +mem/0: storing 5 in location 1023 +run/0: instruction string-append/17 +run/0: ingredient 0 is -8 +run/0: pc now 9 +run/0: instruction string-append/10 +run/0: ingredient 0 is i +mem/0: location 1024 is 5 +run/0: ingredient 1 is a-len +mem/0: location 1018 is 6 +run/0: product 0 is 0 +mem/0: storing 0 in location 1025 +run/0: instruction string-append/11 +mem/0: location 1025 is 0 +run/0: ingredient 0 is 0 +run/0: jump-if fell through +run/0: instruction string-append/12 +run/0: ingredient 0 is result +mem/0: location 1022 is 1045 +run/0: ingredient 1 is {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]} +mem/0: location 1023 is 5 +run/0: address to copy is 1051 +run/0: product 0 is 1051 +mem/0: storing 1051 in location 1026 +run/0: instruction string-append/13 +run/0: ingredient 0 is {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]} +mem/0: location 1017 is 1000 +run/0: ingredient 1 is {name: "i", value: 8, type: 1, properties: ["i": "integer"]} +mem/0: location 1024 is 5 +run/0: address to copy is 1006 +run/0: its type is 4 +mem/0: location 1006 is 44 +run/0: product 0 is 44 +mem/0: storing 44 in location 1027 +run/0: instruction string-append/14 +run/0: ingredient 0 is in +mem/0: location 1027 is 44 +mem/0: location 1026 is 1051 +mem/0: storing 44 in location 1051 +run/0: instruction string-append/15 +run/0: ingredient 0 is i +mem/0: location 1024 is 5 +run/0: ingredient 1 is 1 +run/0: product 0 is 6 +mem/0: storing 6 in location 1024 +run/0: instruction string-append/16 +run/0: ingredient 0 is result-idx +mem/0: location 1023 is 5 +run/0: ingredient 1 is 1 +run/0: product 0 is 6 +mem/0: storing 6 in location 1023 +run/0: instruction string-append/17 +run/0: ingredient 0 is -8 +run/0: pc now 9 +run/0: instruction string-append/10 +run/0: ingredient 0 is i +mem/0: location 1024 is 6 +run/0: ingredient 1 is a-len +mem/0: location 1018 is 6 +run/0: product 0 is 1 +mem/0: storing 1 in location 1025 +run/0: instruction string-append/11 +mem/0: location 1025 is 1 +run/0: ingredient 0 is 1 +run/0: ingredient 1 is +run/0: jumping to instruction 18 +run/0: instruction string-append/19 +run/0: ingredient 0 is 0 +mem/0: storing 0 in location 1024 +run/0: instruction string-append/21 +run/0: ingredient 0 is i +mem/0: location 1024 is 0 +run/0: ingredient 1 is b-len +mem/0: location 1020 is 7 +run/0: product 0 is 0 +mem/0: storing 0 in location 1028 +run/0: instruction string-append/22 +mem/0: location 1028 is 0 +run/0: ingredient 0 is 0 +run/0: jump-if fell through +run/0: instruction string-append/23 +run/0: ingredient 0 is result +mem/0: location 1022 is 1045 +run/0: ingredient 1 is {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]} +mem/0: location 1023 is 6 +run/0: address to copy is 1052 +run/0: product 0 is 1052 +mem/0: storing 1052 in location 1026 +run/0: instruction string-append/24 +run/0: ingredient 0 is {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]} +mem/0: location 1019 is 1007 +run/0: ingredient 1 is {name: "i", value: 8, type: 1, properties: ["i": "integer"]} +mem/0: location 1024 is 0 +run/0: address to copy is 1008 +run/0: its type is 4 +mem/0: location 1008 is 32 +run/0: product 0 is 32 +mem/0: storing 32 in location 1027 +run/0: instruction string-append/25 +run/0: ingredient 0 is in +mem/0: location 1027 is 32 +mem/0: location 1026 is 1052 +mem/0: storing 32 in location 1052 +run/0: instruction string-append/26 +run/0: ingredient 0 is i +mem/0: location 1024 is 0 +run/0: ingredient 1 is 1 +run/0: product 0 is 1 +mem/0: storing 1 in location 1024 +run/0: instruction string-append/27 +run/0: ingredient 0 is result-idx +mem/0: location 1023 is 6 +run/0: ingredient 1 is 1 +run/0: product 0 is 7 +mem/0: storing 7 in location 1023 +run/0: instruction string-append/28 +run/0: ingredient 0 is -8 +run/0: pc now 20 +run/0: instruction string-append/21 +run/0: ingredient 0 is i +mem/0: location 1024 is 1 +run/0: ingredient 1 is b-len +mem/0: location 1020 is 7 +run/0: product 0 is 0 +mem/0: storing 0 in location 1028 +run/0: instruction string-append/22 +mem/0: location 1028 is 0 +run/0: ingredient 0 is 0 +run/0: jump-if fell through +run/0: instruction string-append/23 +run/0: ingredient 0 is result +mem/0: location 1022 is 1045 +run/0: ingredient 1 is {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]} +mem/0: location 1023 is 7 +run/0: address to copy is 1053 +run/0: product 0 is 1053 +mem/0: storing 1053 in location 1026 +run/0: instruction string-append/24 +run/0: ingredient 0 is {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]} +mem/0: location 1019 is 1007 +run/0: ingredient 1 is {name: "i", value: 8, type: 1, properties: ["i": "integer"]} +mem/0: location 1024 is 1 +run/0: address to copy is 1009 +run/0: its type is 4 +mem/0: location 1009 is 119 +run/0: product 0 is 119 +mem/0: storing 119 in location 1027 +run/0: instruction string-append/25 +run/0: ingredient 0 is in +mem/0: location 1027 is 119 +mem/0: location 1026 is 1053 +mem/0: storing 119 in location 1053 +run/0: instruction string-append/26 +run/0: ingredient 0 is i +mem/0: location 1024 is 1 +run/0: ingredient 1 is 1 +run/0: product 0 is 2 +mem/0: storing 2 in location 1024 +run/0: instruction string-append/27 +run/0: ingredient 0 is result-idx +mem/0: location 1023 is 7 +run/0: ingredient 1 is 1 +run/0: product 0 is 8 +mem/0: storing 8 in location 1023 +run/0: instruction string-append/28 +run/0: ingredient 0 is -8 +run/0: pc now 20 +run/0: instruction string-append/21 +run/0: ingredient 0 is i +mem/0: location 1024 is 2 +run/0: ingredient 1 is b-len +mem/0: location 1020 is 7 +run/0: product 0 is 0 +mem/0: storing 0 in location 1028 +run/0: instruction string-append/22 +mem/0: location 1028 is 0 +run/0: ingredient 0 is 0 +run/0: jump-if fell through +run/0: instruction string-append/23 +run/0: ingredient 0 is result +mem/0: location 1022 is 1045 +run/0: ingredient 1 is {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]} +mem/0: location 1023 is 8 +run/0: address to copy is 1054 +run/0: product 0 is 1054 +mem/0: storing 1054 in location 1026 +run/0: instruction string-append/24 +run/0: ingredient 0 is {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]} +mem/0: location 1019 is 1007 +run/0: ingredient 1 is {name: "i", value: 8, type: 1, properties: ["i": "integer"]} +mem/0: location 1024 is 2 +run/0: address to copy is 1010 +run/0: its type is 4 +mem/0: location 1010 is 111 +run/0: product 0 is 111 +mem/0: storing 111 in location 1027 +run/0: instruction string-append/25 +run/0: ingredient 0 is in +mem/0: location 1027 is 111 +mem/0: location 1026 is 1054 +mem/0: storing 111 in location 1054 +run/0: instruction string-append/26 +run/0: ingredient 0 is i +mem/0: location 1024 is 2 +run/0: ingredient 1 is 1 +run/0: product 0 is 3 +mem/0: storing 3 in location 1024 +run/0: instruction string-append/27 +run/0: ingredient 0 is result-idx +mem/0: location 1023 is 8 +run/0: ingredient 1 is 1 +run/0: product 0 is 9 +mem/0: storing 9 in location 1023 +run/0: instruction string-append/28 +run/0: ingredient 0 is -8 +run/0: pc now 20 +run/0: instruction string-append/21 +run/0: ingredient 0 is i +mem/0: location 1024 is 3 +run/0: ingredient 1 is b-len +mem/0: location 1020 is 7 +run/0: product 0 is 0 +mem/0: storing 0 in location 1028 +run/0: instruction string-append/22 +mem/0: location 1028 is 0 +run/0: ingredient 0 is 0 +run/0: jump-if fell through +run/0: instruction string-append/23 +run/0: ingredient 0 is result +mem/0: location 1022 is 1045 +run/0: ingredient 1 is {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]} +mem/0: location 1023 is 9 +run/0: address to copy is 1055 +run/0: product 0 is 1055 +mem/0: storing 1055 in location 1026 +run/0: instruction string-append/24 +run/0: ingredient 0 is {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]} +mem/0: location 1019 is 1007 +run/0: ingredient 1 is {name: "i", value: 8, type: 1, properties: ["i": "integer"]} +mem/0: location 1024 is 3 +run/0: address to copy is 1011 +run/0: its type is 4 +mem/0: location 1011 is 114 +run/0: product 0 is 114 +mem/0: storing 114 in location 1027 +run/0: instruction string-append/25 +run/0: ingredient 0 is in +mem/0: location 1027 is 114 +mem/0: location 1026 is 1055 +mem/0: storing 114 in location 1055 +run/0: instruction string-append/26 +run/0: ingredient 0 is i +mem/0: location 1024 is 3 +run/0: ingredient 1 is 1 +run/0: product 0 is 4 +mem/0: storing 4 in location 1024 +run/0: instruction string-append/27 +run/0: ingredient 0 is result-idx +mem/0: location 1023 is 9 +run/0: ingredient 1 is 1 +run/0: product 0 is 10 +mem/0: storing 10 in location 1023 +run/0: instruction string-append/28 +run/0: ingredient 0 is -8 +run/0: pc now 20 +run/0: instruction string-append/21 +run/0: ingredient 0 is i +mem/0: location 1024 is 4 +run/0: ingredient 1 is b-len +mem/0: location 1020 is 7 +run/0: product 0 is 0 +mem/0: storing 0 in location 1028 +run/0: instruction string-append/22 +mem/0: location 1028 is 0 +run/0: ingredient 0 is 0 +run/0: jump-if fell through +run/0: instruction string-append/23 +run/0: ingredient 0 is result +mem/0: location 1022 is 1045 +run/0: ingredient 1 is {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]} +mem/0: location 1023 is 10 +run/0: address to copy is 1056 +run/0: product 0 is 1056 +mem/0: storing 1056 in location 1026 +run/0: instruction string-append/24 +run/0: ingredient 0 is {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]} +mem/0: location 1019 is 1007 +run/0: ingredient 1 is {name: "i", value: 8, type: 1, properties: ["i": "integer"]} +mem/0: location 1024 is 4 +run/0: address to copy is 1012 +run/0: its type is 4 +mem/0: location 1012 is 108 +run/0: product 0 is 108 +mem/0: storing 108 in location 1027 +run/0: instruction string-append/25 +run/0: ingredient 0 is in +mem/0: location 1027 is 108 +mem/0: location 1026 is 1056 +mem/0: storing 108 in location 1056 +run/0: instruction string-append/26 +run/0: ingredient 0 is i +mem/0: location 1024 is 4 +run/0: ingredient 1 is 1 +run/0: product 0 is 5 +mem/0: storing 5 in location 1024 +run/0: instruction string-append/27 +run/0: ingredient 0 is result-idx +mem/0: location 1023 is 10 +run/0: ingredient 1 is 1 +run/0: product 0 is 11 +mem/0: storing 11 in location 1023 +run/0: instruction string-append/28 +run/0: ingredient 0 is -8 +run/0: pc now 20 +run/0: instruction string-append/21 +run/0: ingredient 0 is i +mem/0: location 1024 is 5 +run/0: ingredient 1 is b-len +mem/0: location 1020 is 7 +run/0: product 0 is 0 +mem/0: storing 0 in location 1028 +run/0: instruction string-append/22 +mem/0: location 1028 is 0 +run/0: ingredient 0 is 0 +run/0: jump-if fell through +run/0: instruction string-append/23 +run/0: ingredient 0 is result +mem/0: location 1022 is 1045 +run/0: ingredient 1 is {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]} +mem/0: location 1023 is 11 +run/0: address to copy is 1057 +run/0: product 0 is 1057 +mem/0: storing 1057 in location 1026 +run/0: instruction string-append/24 +run/0: ingredient 0 is {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]} +mem/0: location 1019 is 1007 +run/0: ingredient 1 is {name: "i", value: 8, type: 1, properties: ["i": "integer"]} +mem/0: location 1024 is 5 +run/0: address to copy is 1013 +run/0: its type is 4 +mem/0: location 1013 is 100 +run/0: product 0 is 100 +mem/0: storing 100 in location 1027 +run/0: instruction string-append/25 +run/0: ingredient 0 is in +mem/0: location 1027 is 100 +mem/0: location 1026 is 1057 +mem/0: storing 100 in location 1057 +run/0: instruction string-append/26 +run/0: ingredient 0 is i +mem/0: location 1024 is 5 +run/0: ingredient 1 is 1 +run/0: product 0 is 6 +mem/0: storing 6 in location 1024 +run/0: instruction string-append/27 +run/0: ingredient 0 is result-idx +mem/0: location 1023 is 11 +run/0: ingredient 1 is 1 +run/0: product 0 is 12 +mem/0: storing 12 in location 1023 +run/0: instruction string-append/28 +run/0: ingredient 0 is -8 +run/0: pc now 20 +run/0: instruction string-append/21 +run/0: ingredient 0 is i +mem/0: location 1024 is 6 +run/0: ingredient 1 is b-len +mem/0: location 1020 is 7 +run/0: product 0 is 0 +mem/0: storing 0 in location 1028 +run/0: instruction string-append/22 +mem/0: location 1028 is 0 +run/0: ingredient 0 is 0 +run/0: jump-if fell through +run/0: instruction string-append/23 +run/0: ingredient 0 is result +mem/0: location 1022 is 1045 +run/0: ingredient 1 is {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]} +mem/0: location 1023 is 12 +run/0: address to copy is 1058 +run/0: product 0 is 1058 +mem/0: storing 1058 in location 1026 +run/0: instruction string-append/24 +run/0: ingredient 0 is {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]} +mem/0: location 1019 is 1007 +run/0: ingredient 1 is {name: "i", value: 8, type: 1, properties: ["i": "integer"]} +mem/0: location 1024 is 6 +run/0: address to copy is 1014 +run/0: its type is 4 +mem/0: location 1014 is 33 +run/0: product 0 is 33 +mem/0: storing 33 in location 1027 +run/0: instruction string-append/25 +run/0: ingredient 0 is in +mem/0: location 1027 is 33 +mem/0: location 1026 is 1058 +mem/0: storing 33 in location 1058 +run/0: instruction string-append/26 +run/0: ingredient 0 is i +mem/0: location 1024 is 6 +run/0: ingredient 1 is 1 +run/0: product 0 is 7 +mem/0: storing 7 in location 1024 +run/0: instruction string-append/27 +run/0: ingredient 0 is result-idx +mem/0: location 1023 is 12 +run/0: ingredient 1 is 1 +run/0: product 0 is 13 +mem/0: storing 13 in location 1023 +run/0: instruction string-append/28 +run/0: ingredient 0 is -8 +run/0: pc now 20 +run/0: instruction string-append/21 +run/0: ingredient 0 is i +mem/0: location 1024 is 7 +run/0: ingredient 1 is b-len +mem/0: location 1020 is 7 +run/0: product 0 is 1 +mem/0: storing 1 in location 1028 +run/0: instruction string-append/22 +mem/0: location 1028 is 1 +run/0: ingredient 0 is 1 +run/0: ingredient 1 is +run/0: jumping to instruction 29 +run/0: instruction string-append/30 +mem/0: location 1022 is 1045 +run/0: result 0 is 1045 +mem/0: storing 1045 in location 3 +run/0: instruction test-string-append-1/3 +run/0: ingredient 0 is 3 +mem/0: location 3 is 1045 +mem/0: location 1045 is 13 +mem/0: location 1046 is 104 +mem/0: location 1047 is 101 +mem/0: location 1048 is 108 +mem/0: location 1049 is 108 +mem/0: location 1050 is 111 +mem/0: location 1051 is 44 +mem/0: location 1052 is 32 +mem/0: location 1053 is 119 +mem/0: location 1054 is 111 +mem/0: location 1055 is 114 +mem/0: location 1056 is 108 +mem/0: location 1057 is 100 +mem/0: location 1058 is 33 +mem/0: storing 13 in location 4 +mem/0: storing 104 in location 5 +mem/0: storing 101 in location 6 +mem/0: storing 108 in location 7 +mem/0: storing 108 in location 8 +mem/0: storing 111 in location 9 +mem/0: storing 44 in location 10 +mem/0: storing 32 in location 11 +mem/0: storing 119 in location 12 +mem/0: storing 111 in location 13 +mem/0: storing 114 in location 14 +mem/0: storing 108 in location 15 +mem/0: storing 100 in location 16 +mem/0: storing 33 in location 17 diff --git a/cpp/060string.mu b/cpp/060string.mu index d81cdf13..3723df2d 100644 --- a/cpp/060string.mu +++ b/cpp/060string.mu @@ -323,3 +323,73 @@ scenario integer-to-decimal-digit-negative [ 4 <- 49 # '1' ] ] + +recipe string-append [ + default-space:address:space <- new location:type, 30:literal + # result = new string[a.length + b.length] + a:address:array:character <- next-ingredient + a-len:integer <- length a:address:array:character/deref + b:address:array:character <- next-ingredient + b-len:integer <- length b:address:array:character/deref + result-len:integer <- add a-len:integer, b-len:integer + result:address:array:character <- new character:type, result-len:integer + # copy a into result + result-idx:integer <- copy 0:literal + i:integer <- copy 0:literal + { + # while i < a.length + a-done?:boolean <- greater-or-equal i:integer, a-len:integer + break-if a-done?:boolean + # result[result-idx] = a[i] + out:address:character <- index-address result:address:array:character/deref, result-idx:integer + in:character <- index a:address:array:character/deref, i:integer + out:address:character/deref <- copy in:character + # ++i + i:integer <- add i:integer, 1:literal + # ++result-idx + result-idx:integer <- add result-idx:integer, 1:literal + loop + } + # copy b into result + i:integer <- copy 0:literal + { + # while i < b.length + b-done?:boolean <- greater-or-equal i:integer, b-len:integer + break-if b-done?:boolean + # result[result-idx] = a[i] + out:address:character <- index-address result:address:array:character/deref, result-idx:integer + in:character <- index b:address:array:character/deref, i:integer + out:address:character/deref <- copy in:character + # ++i + i:integer <- add i:integer, 1:literal + # ++result-idx + result-idx:integer <- add result-idx:integer, 1:literal + loop + } + reply result:address:array:character +] + +scenario string-append-1 [ + run [ + 1:address:array:character/raw <- new [hello,] + 2:address:array:character/raw <- new [ world!] + 3:address:array:character/raw <- string-append 1:address:array:character/raw, 2:address:array:character/raw + 4:array:character/raw <- copy 3:address:array:character/raw/deref + ] + memory should contain [ + 4 <- 13 + 5 <- 104 # 'h' + 6 <- 101 # 'e' + 7 <- 108 # 'l' + 8 <- 108 # 'l' + 9 <- 111 # 'o' + 10 <- 44 # ',' + 11 <- 32 # ' ' + 12 <- 119 # 'w' + 13 <- 111 # 'o' + 14 <- 114 # 'r' + 15 <- 108 # 'l' + 16 <- 100 # 'd' + 17 <- 33 # '!' + ] +] |