diff options
-rw-r--r-- | cpp/.traces/buffer-append-works | 421 | ||||
-rw-r--r-- | cpp/.traces/deref_sidesteps_default_space | 22 | ||||
-rw-r--r-- | cpp/.traces/deref_sidesteps_default_space_in_get | 49 | ||||
-rw-r--r-- | cpp/.traces/deref_sidesteps_default_space_in_index | 56 | ||||
-rw-r--r-- | cpp/031address | 1 | ||||
-rw-r--r-- | cpp/032array | 8 | ||||
-rw-r--r-- | cpp/043space | 45 | ||||
-rw-r--r-- | cpp/050scenario | 2 | ||||
-rw-r--r-- | cpp/060string.mu | 100 |
9 files changed, 684 insertions, 20 deletions
diff --git a/cpp/.traces/buffer-append-works b/cpp/.traces/buffer-append-works new file mode 100644 index 00000000..e6e31d41 --- /dev/null +++ b/cpp/.traces/buffer-append-works @@ -0,0 +1,421 @@ +parse/0: instruction: 33 +parse/0: ingredient: {name: "location", value: 0, type: 0, properties: ["location": "type"]} +parse/0: ingredient: {name: "30", value: 0, type: 0, properties: ["30": "literal"]} +parse/0: product: {name: "default-space", value: 0, type: 2-0, properties: ["default-space": "address":"space"]} +parse/0: instruction: 101 +parse/0: ingredient: {name: "3", value: 0, type: 0, properties: ["3": "literal"]} +parse/0: product: {name: "x", value: 0, type: 2-9, properties: ["x": "address":"buffer"]} +parse/0: instruction: 19 +parse/0: ingredient: {name: "x", value: 0, type: 2-9, properties: ["x": "address":"buffer", "deref": ]} +parse/0: ingredient: {name: "data", value: 0, type: 0, properties: ["data": "offset"]} +parse/0: product: {name: "s1", value: 0, type: 2-5-4, properties: ["s1": "address":"array":"character"]} +parse/0: instruction: 104 +parse/0: ingredient: {name: "x", value: 0, type: 2-9, properties: ["x": "address":"buffer"]} +parse/0: ingredient: {name: "97", value: 0, type: 0, properties: ["97": "literal"]} +parse/0: product: {name: "x", value: 0, type: 2-9, properties: ["x": "address":"buffer"]} +parse/0: instruction: 104 +parse/0: ingredient: {name: "x", value: 0, type: 2-9, properties: ["x": "address":"buffer"]} +parse/0: ingredient: {name: "98", value: 0, type: 0, properties: ["98": "literal"]} +parse/0: product: {name: "x", value: 0, type: 2-9, properties: ["x": "address":"buffer"]} +parse/0: instruction: 104 +parse/0: ingredient: {name: "x", value: 0, type: 2-9, properties: ["x": "address":"buffer"]} +parse/0: ingredient: {name: "99", value: 0, type: 0, properties: ["99": "literal"]} +parse/0: product: {name: "x", value: 0, type: 2-9, properties: ["x": "address":"buffer"]} +parse/0: instruction: 19 +parse/0: ingredient: {name: "x", value: 0, type: 2-9, properties: ["x": "address":"buffer", "deref": ]} +parse/0: ingredient: {name: "data", value: 0, type: 0, properties: ["data": "offset"]} +parse/0: product: {name: "s2", value: 0, type: 2-5-4, properties: ["s2": "address":"array":"character"]} +parse/0: instruction: 13 +parse/0: ingredient: {name: "s1", value: 0, type: 2-5-4, properties: ["s1": "address":"array":"character"]} +parse/0: ingredient: {name: "s2", value: 0, type: 2-5-4, properties: ["s2": "address":"array":"character"]} +parse/0: product: {name: "1", value: 0, type: 3, properties: ["1": "boolean", "raw": ]} +parse/0: instruction: 1 +parse/0: ingredient: {name: "s2", value: 0, type: 2-5-4, properties: ["s2": "address":"array":"character", "deref": ]} +parse/0: product: {name: "2", value: 0, type: 5-4, properties: ["2": "array":"character", "raw": ]} +new/0: location -> 1 +name/0: assign x 1 +name/0: element data of type buffer is at offset 1 +name/0: assign s1 2 +name/0: element data of type buffer is at offset 1 +name/0: assign s2 3 +after-brace/0: recipe test-buffer-append-works +after-brace/0: new ... +after-brace/0: init-buffer ... +after-brace/0: get ... +after-brace/0: buffer-append ... +after-brace/0: buffer-append ... +after-brace/0: buffer-append ... +after-brace/0: get ... +after-brace/0: equal ... +after-brace/0: copy ... +run/0: instruction test-buffer-append-works/0 +mem/0: new alloc: 1000 +mem/0: array size is 30 +run/0: instruction test-buffer-append-works/1 +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 3 +mem/0: storing 3 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 3 +mem/0: array size is 3 +run/0: instruction init-buffer/7 +mem/0: location 1032 is 1060 +run/0: result 0 is 1060 +mem/0: storing 1060 in location 1002 +run/0: instruction test-buffer-append-works/2 +run/0: ingredient 0 is x +mem/0: location 1002 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 1003 +run/0: instruction test-buffer-append-works/3 +mem/0: location 1002 is 1060 +run/0: instruction buffer-append/0 +mem/0: new alloc: 1065 +mem/0: array size is 30 +run/0: instruction buffer-append/1 +run/0: product 0 is 1060 +mem/0: storing 1060 in location 1067 +run/0: instruction buffer-append/2 +run/0: product 0 is 97 +mem/0: storing 97 in location 1068 +run/0: instruction buffer-append/4 +mem/0: location 1067 is 1060 +run/0: instruction buffer-full?/0 +mem/0: new alloc: 1095 +mem/0: array size is 30 +run/0: instruction buffer-full?/1 +run/0: product 0 is 1060 +mem/0: storing 1060 in location 1097 +run/0: instruction buffer-full?/2 +run/0: ingredient 0 is in +mem/0: location 1097 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 1098 +run/0: instruction buffer-full?/3 +run/0: ingredient 0 is in +mem/0: location 1097 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 1099 +run/0: instruction buffer-full?/4 +mem/0: location 1099 is 1062 +mem/0: storing 3 in location 1100 +run/0: instruction buffer-full?/5 +run/0: ingredient 0 is len +mem/0: location 1098 is 0 +run/0: ingredient 1 is capacity +mem/0: location 1100 is 3 +run/0: product 0 is 0 +mem/0: storing 0 in location 1101 +run/0: instruction buffer-full?/6 +mem/0: location 1101 is 0 +run/0: result 0 is 0 +mem/0: storing 0 in location 1069 +run/0: instruction buffer-append/5 +mem/0: location 1069 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 1067 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 1070 +run/0: instruction buffer-append/9 +run/0: ingredient 0 is in +mem/0: location 1067 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 1071 +run/0: instruction buffer-append/10 +run/0: ingredient 0 is s +mem/0: location 1071 is 1062 +run/0: ingredient 1 is {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]} +mem/0: location 1070 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 1072 +run/0: instruction buffer-append/11 +run/0: ingredient 0 is c +mem/0: location 1068 is 97 +mem/0: location 1072 is 1063 +mem/0: storing 97 in location 1063 +run/0: instruction buffer-append/12 +run/0: ingredient 0 is len +mem/0: location 1070 is 1060 +mem/0: location 1060 is 0 +run/0: ingredient 1 is 1 +run/0: product 0 is 1 +mem/0: location 1070 is 1060 +mem/0: storing 1 in location 1060 +run/0: instruction buffer-append/13 +mem/0: location 1067 is 1060 +run/0: result 0 is 1060 +mem/0: storing 1060 in location 1002 +run/0: instruction test-buffer-append-works/4 +mem/0: location 1002 is 1060 +run/0: instruction buffer-append/0 +mem/0: new alloc: 1125 +mem/0: array size is 30 +run/0: instruction buffer-append/1 +run/0: product 0 is 1060 +mem/0: storing 1060 in location 1127 +run/0: instruction buffer-append/2 +run/0: product 0 is 98 +mem/0: storing 98 in location 1128 +run/0: instruction buffer-append/4 +mem/0: location 1127 is 1060 +run/0: instruction buffer-full?/0 +mem/0: new alloc: 1155 +mem/0: array size is 30 +run/0: instruction buffer-full?/1 +run/0: product 0 is 1060 +mem/0: storing 1060 in location 1157 +run/0: instruction buffer-full?/2 +run/0: ingredient 0 is in +mem/0: location 1157 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 1158 +run/0: instruction buffer-full?/3 +run/0: ingredient 0 is in +mem/0: location 1157 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 1159 +run/0: instruction buffer-full?/4 +mem/0: location 1159 is 1062 +mem/0: storing 3 in location 1160 +run/0: instruction buffer-full?/5 +run/0: ingredient 0 is len +mem/0: location 1158 is 1 +run/0: ingredient 1 is capacity +mem/0: location 1160 is 3 +run/0: product 0 is 0 +mem/0: storing 0 in location 1161 +run/0: instruction buffer-full?/6 +mem/0: location 1161 is 0 +run/0: result 0 is 0 +mem/0: storing 0 in location 1129 +run/0: instruction buffer-append/5 +mem/0: location 1129 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 1127 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 1130 +run/0: instruction buffer-append/9 +run/0: ingredient 0 is in +mem/0: location 1127 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 1131 +run/0: instruction buffer-append/10 +run/0: ingredient 0 is s +mem/0: location 1131 is 1062 +run/0: ingredient 1 is {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]} +mem/0: location 1130 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 1132 +run/0: instruction buffer-append/11 +run/0: ingredient 0 is c +mem/0: location 1128 is 98 +mem/0: location 1132 is 1064 +mem/0: storing 98 in location 1064 +run/0: instruction buffer-append/12 +run/0: ingredient 0 is len +mem/0: location 1130 is 1060 +mem/0: location 1060 is 1 +run/0: ingredient 1 is 1 +run/0: product 0 is 2 +mem/0: location 1130 is 1060 +mem/0: storing 2 in location 1060 +run/0: instruction buffer-append/13 +mem/0: location 1127 is 1060 +run/0: result 0 is 1060 +mem/0: storing 1060 in location 1002 +run/0: instruction test-buffer-append-works/5 +mem/0: location 1002 is 1060 +run/0: instruction buffer-append/0 +mem/0: new alloc: 1185 +mem/0: array size is 30 +run/0: instruction buffer-append/1 +run/0: product 0 is 1060 +mem/0: storing 1060 in location 1187 +run/0: instruction buffer-append/2 +run/0: product 0 is 99 +mem/0: storing 99 in location 1188 +run/0: instruction buffer-append/4 +mem/0: location 1187 is 1060 +run/0: instruction buffer-full?/0 +mem/0: new alloc: 1215 +mem/0: array size is 30 +run/0: instruction buffer-full?/1 +run/0: product 0 is 1060 +mem/0: storing 1060 in location 1217 +run/0: instruction buffer-full?/2 +run/0: ingredient 0 is in +mem/0: location 1217 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 1218 +run/0: instruction buffer-full?/3 +run/0: ingredient 0 is in +mem/0: location 1217 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 1219 +run/0: instruction buffer-full?/4 +mem/0: location 1219 is 1062 +mem/0: storing 3 in location 1220 +run/0: instruction buffer-full?/5 +run/0: ingredient 0 is len +mem/0: location 1218 is 2 +run/0: ingredient 1 is capacity +mem/0: location 1220 is 3 +run/0: product 0 is 0 +mem/0: storing 0 in location 1221 +run/0: instruction buffer-full?/6 +mem/0: location 1221 is 0 +run/0: result 0 is 0 +mem/0: storing 0 in location 1189 +run/0: instruction buffer-append/5 +mem/0: location 1189 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 1187 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 1190 +run/0: instruction buffer-append/9 +run/0: ingredient 0 is in +mem/0: location 1187 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 1191 +run/0: instruction buffer-append/10 +run/0: ingredient 0 is s +mem/0: location 1191 is 1062 +run/0: ingredient 1 is {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]} +mem/0: location 1190 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 1192 +run/0: instruction buffer-append/11 +run/0: ingredient 0 is c +mem/0: location 1188 is 99 +mem/0: location 1192 is 1065 +mem/0: storing 99 in location 1065 +run/0: instruction buffer-append/12 +run/0: ingredient 0 is len +mem/0: location 1190 is 1060 +mem/0: location 1060 is 2 +run/0: ingredient 1 is 1 +run/0: product 0 is 3 +mem/0: location 1190 is 1060 +mem/0: storing 3 in location 1060 +run/0: instruction buffer-append/13 +mem/0: location 1187 is 1060 +run/0: result 0 is 1060 +mem/0: storing 1060 in location 1002 +run/0: instruction test-buffer-append-works/6 +run/0: ingredient 0 is x +mem/0: location 1002 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 1004 +run/0: instruction test-buffer-append-works/7 +run/0: ingredient 0 is s1 +mem/0: location 1003 is 1062 +run/0: ingredient 1 is s2 +mem/0: location 1004 is 1062 +run/0: product 0 is 1 +mem/0: storing 1 in location 1 +run/0: instruction test-buffer-append-works/8 +run/0: ingredient 0 is s2 +mem/0: location 1004 is 1062 +mem/0: location 1062 is 3 +mem/0: location 1063 is 97 +mem/0: location 1064 is 98 +mem/0: location 1065 is 99 +mem/0: storing 3 in location 2 +mem/0: storing 97 in location 3 +mem/0: storing 98 in location 4 +mem/0: storing 99 in location 5 diff --git a/cpp/.traces/deref_sidesteps_default_space b/cpp/.traces/deref_sidesteps_default_space index 9c7205ab..0fd3d790 100644 --- a/cpp/.traces/deref_sidesteps_default_space +++ b/cpp/.traces/deref_sidesteps_default_space @@ -1,14 +1,14 @@ parse/0: instruction: 1 parse/0: ingredient: {name: "34", value: 0, type: 0, properties: ["34": "literal"]} -parse/0: product: {name: "7", value: 0, type: 1, properties: ["7": "integer"]} +parse/0: product: {name: "3", value: 0, type: 1, properties: ["3": "integer"]} parse/0: instruction: 1 parse/0: ingredient: {name: "5", value: 0, type: 0, properties: ["5": "literal"]} -parse/0: product: {name: "10", value: 0, type: 1, properties: ["10": "integer"]} +parse/0: product: {name: "1000", value: 0, type: 1, properties: ["1000": "integer"]} parse/0: instruction: 1 -parse/0: ingredient: {name: "10", value: 0, type: 0, properties: ["10": "literal"]} +parse/0: ingredient: {name: "1000", value: 0, type: 0, properties: ["1000": "literal"]} parse/0: product: {name: "default-space", value: 0, type: 2-0, properties: ["default-space": "address":"space"]} parse/0: instruction: 1 -parse/0: ingredient: {name: "7", value: 0, type: 0, properties: ["7": "literal"]} +parse/0: ingredient: {name: "3", value: 0, type: 0, properties: ["3": "literal"]} parse/0: product: {name: "1", value: 0, type: 2-1, properties: ["1": "address":"integer"]} parse/0: instruction: 1 parse/0: ingredient: {name: "1", value: 0, type: 2-1, properties: ["1": "address":"integer", "deref": ]} @@ -21,17 +21,17 @@ after-brace/0: copy ... after-brace/0: copy ... run/0: instruction main/0 run/0: ingredient 0 is 34 -mem/0: storing 34 in location 7 +mem/0: storing 34 in location 3 run/0: instruction main/1 run/0: ingredient 0 is 5 -mem/0: storing 5 in location 10 +mem/0: storing 5 in location 1000 run/0: instruction main/2 -run/0: ingredient 0 is 10 +run/0: ingredient 0 is 1000 run/0: instruction main/3 -run/0: ingredient 0 is 7 -mem/0: storing 7 in location 12 +run/0: ingredient 0 is 3 +mem/0: storing 3 in location 1002 run/0: instruction main/4 run/0: ingredient 0 is 1 -mem/0: location 12 is 7 -mem/0: location 7 is 34 +mem/0: location 1002 is 3 +mem/0: location 3 is 34 mem/0: storing 34 in location 8 diff --git a/cpp/.traces/deref_sidesteps_default_space_in_get b/cpp/.traces/deref_sidesteps_default_space_in_get new file mode 100644 index 00000000..e12e1500 --- /dev/null +++ b/cpp/.traces/deref_sidesteps_default_space_in_get @@ -0,0 +1,49 @@ +parse/0: instruction: 1 +parse/0: ingredient: {name: "34", value: 0, type: 0, properties: ["34": "literal"]} +parse/0: product: {name: "12", value: 0, type: 1, properties: ["12": "integer"]} +parse/0: instruction: 1 +parse/0: ingredient: {name: "35", value: 0, type: 0, properties: ["35": "literal"]} +parse/0: product: {name: "13", value: 0, type: 1, properties: ["13": "integer"]} +parse/0: instruction: 1 +parse/0: ingredient: {name: "5", value: 0, type: 0, properties: ["5": "literal"]} +parse/0: product: {name: "1000", value: 0, type: 1, properties: ["1000": "integer"]} +parse/0: instruction: 1 +parse/0: ingredient: {name: "1000", value: 0, type: 0, properties: ["1000": "literal"]} +parse/0: product: {name: "default-space", value: 0, type: 2-0, properties: ["default-space": "address":"space"]} +parse/0: instruction: 1 +parse/0: ingredient: {name: "12", value: 0, type: 0, properties: ["12": "literal"]} +parse/0: product: {name: "1", value: 0, type: 2-6, properties: ["1": "address":"point"]} +parse/0: instruction: 19 +parse/0: ingredient: {name: "1", value: 0, type: 2-6, properties: ["1": "address":"point", "deref": ]} +parse/0: ingredient: {name: "1", value: 0, type: 0, properties: ["1": "offset"]} +parse/0: product: {name: "9", value: 0, type: 1, properties: ["9": "integer", "raw": ]} +after-brace/0: recipe main +after-brace/0: copy ... +after-brace/0: copy ... +after-brace/0: copy ... +after-brace/0: copy ... +after-brace/0: copy ... +after-brace/0: get ... +run/0: instruction main/0 +run/0: ingredient 0 is 34 +mem/0: storing 34 in location 12 +run/0: instruction main/1 +run/0: ingredient 0 is 35 +mem/0: storing 35 in location 13 +run/0: instruction main/2 +run/0: ingredient 0 is 5 +mem/0: storing 5 in location 1000 +run/0: instruction main/3 +run/0: ingredient 0 is 1000 +run/0: instruction main/4 +run/0: ingredient 0 is 12 +mem/0: storing 12 in location 1002 +run/0: instruction main/5 +run/0: ingredient 0 is 1 +mem/0: location 1002 is 12 +run/0: ingredient 1 is 1 +run/0: address to copy is 13 +run/0: its type is 1 +mem/0: location 13 is 35 +run/0: product 0 is 35 +mem/0: storing 35 in location 9 diff --git a/cpp/.traces/deref_sidesteps_default_space_in_index b/cpp/.traces/deref_sidesteps_default_space_in_index new file mode 100644 index 00000000..24c8ea0e --- /dev/null +++ b/cpp/.traces/deref_sidesteps_default_space_in_index @@ -0,0 +1,56 @@ +parse/0: instruction: 1 +parse/0: ingredient: {name: "2", value: 0, type: 0, properties: ["2": "literal"]} +parse/0: product: {name: "12", value: 0, type: 1, properties: ["12": "integer"]} +parse/0: instruction: 1 +parse/0: ingredient: {name: "34", value: 0, type: 0, properties: ["34": "literal"]} +parse/0: product: {name: "13", value: 0, type: 1, properties: ["13": "integer"]} +parse/0: instruction: 1 +parse/0: ingredient: {name: "35", value: 0, type: 0, properties: ["35": "literal"]} +parse/0: product: {name: "14", value: 0, type: 1, properties: ["14": "integer"]} +parse/0: instruction: 1 +parse/0: ingredient: {name: "5", value: 0, type: 0, properties: ["5": "literal"]} +parse/0: product: {name: "1000", value: 0, type: 1, properties: ["1000": "integer"]} +parse/0: instruction: 1 +parse/0: ingredient: {name: "1000", value: 0, type: 0, properties: ["1000": "literal"]} +parse/0: product: {name: "default-space", value: 0, type: 2-0, properties: ["default-space": "address":"space"]} +parse/0: instruction: 1 +parse/0: ingredient: {name: "12", value: 0, type: 0, properties: ["12": "literal"]} +parse/0: product: {name: "1", value: 0, type: 2-5-1, properties: ["1": "address":"array":"integer"]} +parse/0: instruction: 21 +parse/0: ingredient: {name: "1", value: 0, type: 2-5-1, properties: ["1": "address":"array":"integer", "deref": ]} +parse/0: ingredient: {name: "1", value: 0, type: 0, properties: ["1": "literal"]} +parse/0: product: {name: "9", value: 0, type: 1, properties: ["9": "integer", "raw": ]} +after-brace/0: recipe main +after-brace/0: copy ... +after-brace/0: copy ... +after-brace/0: copy ... +after-brace/0: copy ... +after-brace/0: copy ... +after-brace/0: copy ... +after-brace/0: index ... +run/0: instruction main/0 +run/0: ingredient 0 is 2 +mem/0: storing 2 in location 12 +run/0: instruction main/1 +run/0: ingredient 0 is 34 +mem/0: storing 34 in location 13 +run/0: instruction main/2 +run/0: ingredient 0 is 35 +mem/0: storing 35 in location 14 +run/0: instruction main/3 +run/0: ingredient 0 is 5 +mem/0: storing 5 in location 1000 +run/0: instruction main/4 +run/0: ingredient 0 is 1000 +run/0: instruction main/5 +run/0: ingredient 0 is 12 +mem/0: storing 12 in location 1002 +run/0: instruction main/6 +run/0: ingredient 0 is {name: "1", value: 1, type: 2-5-1, properties: ["1": "address":"array":"integer", "deref": ]} +mem/0: location 1002 is 12 +run/0: ingredient 1 is {name: "1", value: 1, type: 0, properties: ["1": "literal"]} +run/0: address to copy is 14 +run/0: its type is 1 +mem/0: location 14 is 35 +run/0: product 0 is 35 +mem/0: storing 35 in location 9 diff --git a/cpp/031address b/cpp/031address index 801459f6..e3f31869 100644 --- a/cpp/031address +++ b/cpp/031address @@ -32,6 +32,7 @@ x = canonize(x); :(code) reagent canonize(reagent x) { + if (isa_literal(x)) return x; //? cout << "canonize\n"; //? 1 reagent r = x; //? cout << x.to_string() << " => " << r.to_string() << '\n'; //? 1 diff --git a/cpp/032array b/cpp/032array index 84ee4d38..284ca592 100644 --- a/cpp/032array +++ b/cpp/032array @@ -98,21 +98,23 @@ case INDEX: { //? if (Trace_stream) Trace_stream->dump_layer = "run"; //? 1 trace("run") << "ingredient 0 is " << instructions[pc].ingredients[0].to_string(); reagent base = canonize(instructions[pc].ingredients[0]); -//? trace("run") << "ingredient 0 after canonize: " << instructions[pc].ingredients[0].to_string(); //? 1 +//? trace("run") << "ingredient 0 after canonize: " << base.to_string(); //? 1 int base_address = base.value; assert(base.types[0] == ARRAY); trace("run") << "ingredient 1 is " << instructions[pc].ingredients[1].to_string(); reagent offset = canonize(instructions[pc].ingredients[1]); +//? trace("run") << "ingredient 1 after canonize: " << offset.to_string(); //? 1 vector<int> offset_val(read_memory(offset)); vector<type_number> element_type = array_element(base.types); +//? trace("run") << "offset: " << offset_val[0]; //? 1 +//? trace("run") << "size of elements: " << size_of(element_type); //? 1 int src = base_address + 1 + offset_val[0]*size_of(element_type); trace("run") << "address to copy is " << src; trace("run") << "its type is " << element_type[0]; reagent tmp; tmp.set_value(src); copy(element_type.begin(), element_type.end(), inserter(tmp.types, tmp.types.begin())); - tmp.properties.push_back(pair<string, vector<string> >("raw", vector<string>())); -//? cout << "AAA: " << tmp.to_string() << '\n'; //? 2 +//? trace("run") << "AAA: " << tmp.to_string() << '\n'; //? 3 vector<int> result(read_memory(tmp)); trace("run") << "product 0 is " << result[0]; write_memory(instructions[pc].products[0], result); diff --git a/cpp/043space b/cpp/043space index 1bb91b8e..b2b29cf3 100644 --- a/cpp/043space +++ b/cpp/043space @@ -16,12 +16,12 @@ recipe main [ :(scenario "deref_sidesteps_default_space") recipe main [ # pretend pointer from outside - 7:integer <- copy 34:literal + 3:integer <- copy 34:literal # pretend array - 10:integer <- copy 5:literal + 1000:integer <- copy 5:literal # actual start of this function - default-space:address:space <- copy 10:literal - 1:address:integer <- copy 7:literal + default-space:address:space <- copy 1000:literal + 1:address:integer <- copy 3:literal 8:integer/raw <- copy 1:address:integer/deref ] +mem: storing 34 in location 8 @@ -37,7 +37,7 @@ reagent r = absolutize(x); reagent absolutize(reagent x) { //? if (Recipe_number.find("increment-counter") != Recipe_number.end()) //? 1 //? cout << "AAA " << "increment-counter/2: " << Recipe[Recipe_number["increment-counter"]].steps[2].products[0].to_string() << '\n'; //? 1 -//? cout << "absolutize " << x.to_string() << '\n'; //? 3 +//? cout << "absolutize " << x.to_string() << '\n'; //? 4 //? cout << is_raw(x) << '\n'; //? 1 if (is_raw(x) || is_dummy(x)) return x; //? cout << "not raw: " << x.to_string() << '\n'; //? 1 @@ -52,6 +52,41 @@ reagent absolutize(reagent x) { :(before "return result" following "reagent deref(reagent x)") result.properties.push_back(pair<string, vector<string> >("raw", vector<string>())); +:(scenario "deref_sidesteps_default_space_in_get") +recipe main [ + # pretend pointer to container from outside + 12:integer <- copy 34:literal + 13:integer <- copy 35:literal + # pretend array + 1000:integer <- copy 5:literal + # actual start of this function + default-space:address:space <- copy 1000:literal + 1:address:point <- copy 12:literal + 9:integer/raw <- get 1:address:point/deref, 1:offset +] ++mem: storing 35 in location 9 + +:(after "reagent tmp" following "case GET:") +tmp.properties.push_back(pair<string, vector<string> >("raw", vector<string>())); + +:(scenario "deref_sidesteps_default_space_in_index") +recipe main [ + # pretend pointer to array from outside + 12:integer <- copy 2:literal + 13:integer <- copy 34:literal + 14:integer <- copy 35:literal + # pretend array + 1000:integer <- copy 5:literal + # actual start of this function + default-space:address:space <- copy 1000:literal + 1:address:array:integer <- copy 12:literal + 9:integer/raw <- index 1:address:array:integer/deref, 1:literal +] ++mem: storing 35 in location 9 + +:(after "reagent tmp" following "case INDEX:") +tmp.properties.push_back(pair<string, vector<string> >("raw", vector<string>())); + :(code) int space_base(const reagent& x) { return Current_routine->calls.top().default_space; diff --git a/cpp/050scenario b/cpp/050scenario index 199fd692..ab057ccc 100644 --- a/cpp/050scenario +++ b/cpp/050scenario @@ -18,7 +18,7 @@ for (size_t i = 0; i < Scenarios.size(); ++i) { setup(); Trace_file = Scenarios[i].name; START_TRACING_UNTIL_END_OF_SCOPE -//? Trace_stream->dump_layer = "all"; //? 1 +//? Trace_stream->dump_layer = "all"; //? 2 //? cout << "before: " << Memory[1] << '\n'; //? 1 //? Trace_stream->dump_layer = "all"; //? 1 //? cout << "Before:\n"; dump_memory(); //? 1 diff --git a/cpp/060string.mu b/cpp/060string.mu index 85ff65b6..fb1a1eb5 100644 --- a/cpp/060string.mu +++ b/cpp/060string.mu @@ -105,11 +105,111 @@ container buffer [ recipe init-buffer [ default-space:address:space <- new location:type, 30:literal +#? $print default-space:address:space +#? $print [ +#? ] result:address:buffer <- new buffer:type len:address:integer <- get-address result:address:buffer/deref, length:offset len:address:integer/deref <- copy 0:literal s:address:address:array:character <- get-address result:address:buffer/deref, data:offset capacity:integer <- next-ingredient s:address:address:array:character/deref <- new character:type, capacity:integer +#? $print s:address:address:array:character/deref +#? $print [ +#? ] reply result:address:buffer ] + +recipe grow-buffer [ + default-space:address:space <- new location:type, 30:literal + in:address:buffer <- next-ingredient + # double buffer size + x:address:address:array:character <- get-address in:address:buffer/deref, data:offset + oldlen:integer <- length x:address:address:array:character/deref/deref + newlen:integer <- multiply oldlen:integer, 2:literal + olddata:address:array:character <- copy x:address:address:array:character/deref + x:address:address:array:character/deref <- new character:type, newlen:integer + # copy old contents + i:integer <- copy 0:literal + { + done?:boolean <- greater-or-equal i:integer, oldlen:integer + break-if done?:boolean + src:character <- index olddata:address:array:character/deref, i:integer + dest:address:character <- index-address x:address:address:array:character/deref/deref, i:integer + dest:address:character/deref <- copy src:character + i:integer <- add i:integer, 1:literal + loop + } + reply in:address:buffer +] + +recipe buffer-full? [ + default-space:address:space <- new location:type, 30:literal + in:address:buffer <- next-ingredient + len:integer <- get in:address:buffer/deref, length:offset + s:address:array:character <- get in:address:buffer/deref, data:offset + capacity:integer <- length s:address:array:character/deref + result:boolean <- greater-or-equal len:integer, capacity:integer + reply result:boolean +] + +# in:address:buffer <- buffer-append in:address:buffer, c:character +recipe buffer-append [ + default-space:address:space <- new location:type, 30:literal + in:address:buffer <- next-ingredient + c:character <- next-ingredient + { + # grow buffer if necessary + full?:boolean <- buffer-full? in:address:buffer + break-unless full?:boolean + in:address:buffer <- grow-buffer in:address:buffer + } + len:address:integer <- get-address in:address:buffer/deref, length:offset + s:address:array:character <- get in:address:buffer/deref, data:offset + dest:address:character <- index-address s:address:array:character/deref, len:address:integer/deref + dest:address:character/deref <- copy c:character + len:address:integer/deref <- add len:address:integer/deref, 1:literal + reply in:address:buffer/same-as-arg:0 +] + +scenario buffer-append-works [ + run [ + default-space:address:space <- new location:type, 30:literal + x:address:buffer <- init-buffer 3:literal + s1:address:array:character <- get x:address:buffer/deref, data:offset + x:address:buffer <- buffer-append x:address:buffer, 97:literal # 'a' + x:address:buffer <- buffer-append x:address:buffer, 98:literal # 'b' + x:address:buffer <- buffer-append x:address:buffer, 99:literal # 'c' + s2:address:array:character <- get x:address:buffer/deref, data:offset + 1:boolean/raw <- equal s1:address:array:character, s2:address:array:character +#? $print s2:address:array:character +#? $print [ +#? ] +#? $print 1060:integer/raw +#? $print [ +#? ] +#? $print 1061:integer/raw +#? $print [ +#? ] +#? $print 1062:integer/raw +#? $print [ +#? ] +#? $print 1063:integer/raw +#? $print [ +#? ] +#? $print 1064:integer/raw +#? $print [ +#? ] +#? $print 1065:integer/raw +#? $print [ +#? ] + 2:array:character/raw <- copy s2:address:array:character/deref + ] + memory should contain [ + 1 <- 1 # no change in data pointer + 2 <- 3 # size of data + 3 <- 97 # data + 4 <- 98 + 5 <- 99 + ] +] |