diff options
-rw-r--r-- | cpp/.traces/array-from-args | 234 | ||||
-rw-r--r-- | cpp/062array.mu | 40 |
2 files changed, 274 insertions, 0 deletions
diff --git a/cpp/.traces/array-from-args b/cpp/.traces/array-from-args new file mode 100644 index 00000000..d2b9380f --- /dev/null +++ b/cpp/.traces/array-from-args @@ -0,0 +1,234 @@ +parse/0: instruction: 114 +parse/0: ingredient: {name: "0", value: 0, type: 0, properties: ["0": "literal"]} +parse/0: ingredient: {name: "1", value: 0, type: 0, properties: ["1": "literal"]} +parse/0: ingredient: {name: "2", value: 0, type: 0, properties: ["2": "literal"]} +parse/0: product: {name: "1", value: 0, type: 2-5-1, properties: ["1": "address":"array":"location"]} +parse/0: instruction: 1 +parse/0: ingredient: {name: "1", value: 0, type: 2-5-1, properties: ["1": "address":"array":"location", "deref": ]} +parse/0: product: {name: "2", value: 0, type: 5-1, properties: ["2": "array":"location"]} +after-brace/0: recipe test-array-from-args +after-brace/0: init-array ... +after-brace/0: copy ... +new/0: routine allocated memory from 1000 to 101000 +schedule/0: test-array-from-args +run/0: instruction test-array-from-args/0 +run/0: instruction init-array/0 +mem/0: array size is 30 +mem/0: new alloc: 1000 +run/0: instruction init-array/1 +run/0: ingredient 0 is 0 +mem/0: storing 0 in location 1002 +run/0: instruction init-array/3 +run/0: product 0 is 0 +mem/0: storing 0 in location 1003 +mem/0: storing 1 in location 1004 +run/0: instruction init-array/4 +mem/0: location 1004 is 1 +run/0: ingredient 0 is 1 +run/0: jump-unless fell through +run/0: instruction init-array/5 +run/0: ingredient 0 is capacity +mem/0: location 1002 is 0 +run/0: ingredient 1 is 1 +run/0: product 0 is 1 +mem/0: storing 1 in location 1002 +run/0: instruction init-array/6 +run/0: ingredient 0 is -4 +run/0: jumping to instruction 3 +run/0: instruction init-array/3 +run/0: product 0 is 1 +mem/0: storing 1 in location 1003 +mem/0: storing 1 in location 1004 +run/0: instruction init-array/4 +mem/0: location 1004 is 1 +run/0: ingredient 0 is 1 +run/0: jump-unless fell through +run/0: instruction init-array/5 +run/0: ingredient 0 is capacity +mem/0: location 1002 is 1 +run/0: ingredient 1 is 1 +run/0: product 0 is 2 +mem/0: storing 2 in location 1002 +run/0: instruction init-array/6 +run/0: ingredient 0 is -4 +run/0: jumping to instruction 3 +run/0: instruction init-array/3 +run/0: product 0 is 2 +mem/0: storing 2 in location 1003 +mem/0: storing 1 in location 1004 +run/0: instruction init-array/4 +mem/0: location 1004 is 1 +run/0: ingredient 0 is 1 +run/0: jump-unless fell through +run/0: instruction init-array/5 +run/0: ingredient 0 is capacity +mem/0: location 1002 is 2 +run/0: ingredient 1 is 1 +run/0: product 0 is 3 +mem/0: storing 3 in location 1002 +run/0: instruction init-array/6 +run/0: ingredient 0 is -4 +run/0: jumping to instruction 3 +run/0: instruction init-array/3 +mem/0: storing 0 in location 1004 +run/0: instruction init-array/4 +mem/0: location 1004 is 0 +run/0: ingredient 0 is 0 +run/0: ingredient 1 is +run/0: jumping to instruction 7 +run/0: instruction init-array/8 +mem/0: location 1002 is 3 +mem/0: array size is 3 +mem/0: new alloc: 1030 +mem/0: storing 1030 in location 1005 +run/0: instruction init-array/9 +run/0: instruction init-array/10 +run/0: ingredient 0 is 0 +mem/0: storing 0 in location 1006 +run/0: instruction init-array/12 +run/0: ingredient 0 is i +mem/0: location 1006 is 0 +run/0: ingredient 1 is capacity +mem/0: location 1002 is 3 +run/0: product 0 is 0 +mem/0: storing 0 in location 1007 +run/0: instruction init-array/13 +mem/0: location 1007 is 0 +run/0: ingredient 0 is 0 +run/0: jump-if fell through +run/0: instruction init-array/14 +run/0: product 0 is 0 +mem/0: storing 0 in location 1003 +mem/0: storing 1 in location 1004 +run/0: instruction init-array/15 +run/0: ingredient 0 is exists? +mem/0: location 1004 is 1 +run/0: instruction init-array/16 +run/0: ingredient 0 is result +mem/0: location 1005 is 1030 +run/0: ingredient 1 is {name: "i", value: 5, type: 1, properties: ["i": "integer"]} +mem/0: location 1006 is 0 +run/0: address to copy is 1031 +run/0: product 0 is 1031 +mem/0: storing 1031 in location 1008 +run/0: instruction init-array/17 +run/0: ingredient 0 is curr-value +mem/0: location 1003 is 0 +mem/0: location 1008 is 1031 +mem/0: storing 0 in location 1031 +run/0: instruction init-array/18 +run/0: ingredient 0 is i +mem/0: location 1006 is 0 +run/0: ingredient 1 is 1 +run/0: product 0 is 1 +mem/0: storing 1 in location 1006 +run/0: instruction init-array/19 +run/0: ingredient 0 is -8 +run/0: jumping to instruction 12 +run/0: instruction init-array/12 +run/0: ingredient 0 is i +mem/0: location 1006 is 1 +run/0: ingredient 1 is capacity +mem/0: location 1002 is 3 +run/0: product 0 is 0 +mem/0: storing 0 in location 1007 +run/0: instruction init-array/13 +mem/0: location 1007 is 0 +run/0: ingredient 0 is 0 +run/0: jump-if fell through +run/0: instruction init-array/14 +run/0: product 0 is 1 +mem/0: storing 1 in location 1003 +mem/0: storing 1 in location 1004 +run/0: instruction init-array/15 +run/0: ingredient 0 is exists? +mem/0: location 1004 is 1 +run/0: instruction init-array/16 +run/0: ingredient 0 is result +mem/0: location 1005 is 1030 +run/0: ingredient 1 is {name: "i", value: 5, type: 1, properties: ["i": "integer"]} +mem/0: location 1006 is 1 +run/0: address to copy is 1032 +run/0: product 0 is 1032 +mem/0: storing 1032 in location 1008 +run/0: instruction init-array/17 +run/0: ingredient 0 is curr-value +mem/0: location 1003 is 1 +mem/0: location 1008 is 1032 +mem/0: storing 1 in location 1032 +run/0: instruction init-array/18 +run/0: ingredient 0 is i +mem/0: location 1006 is 1 +run/0: ingredient 1 is 1 +run/0: product 0 is 2 +mem/0: storing 2 in location 1006 +run/0: instruction init-array/19 +run/0: ingredient 0 is -8 +run/0: jumping to instruction 12 +run/0: instruction init-array/12 +run/0: ingredient 0 is i +mem/0: location 1006 is 2 +run/0: ingredient 1 is capacity +mem/0: location 1002 is 3 +run/0: product 0 is 0 +mem/0: storing 0 in location 1007 +run/0: instruction init-array/13 +mem/0: location 1007 is 0 +run/0: ingredient 0 is 0 +run/0: jump-if fell through +run/0: instruction init-array/14 +run/0: product 0 is 2 +mem/0: storing 2 in location 1003 +mem/0: storing 1 in location 1004 +run/0: instruction init-array/15 +run/0: ingredient 0 is exists? +mem/0: location 1004 is 1 +run/0: instruction init-array/16 +run/0: ingredient 0 is result +mem/0: location 1005 is 1030 +run/0: ingredient 1 is {name: "i", value: 5, type: 1, properties: ["i": "integer"]} +mem/0: location 1006 is 2 +run/0: address to copy is 1033 +run/0: product 0 is 1033 +mem/0: storing 1033 in location 1008 +run/0: instruction init-array/17 +run/0: ingredient 0 is curr-value +mem/0: location 1003 is 2 +mem/0: location 1008 is 1033 +mem/0: storing 2 in location 1033 +run/0: instruction init-array/18 +run/0: ingredient 0 is i +mem/0: location 1006 is 2 +run/0: ingredient 1 is 1 +run/0: product 0 is 3 +mem/0: storing 3 in location 1006 +run/0: instruction init-array/19 +run/0: ingredient 0 is -8 +run/0: jumping to instruction 12 +run/0: instruction init-array/12 +run/0: ingredient 0 is i +mem/0: location 1006 is 3 +run/0: ingredient 1 is capacity +mem/0: location 1002 is 3 +run/0: product 0 is 1 +mem/0: storing 1 in location 1007 +run/0: instruction init-array/13 +mem/0: location 1007 is 1 +run/0: ingredient 0 is 1 +run/0: ingredient 1 is +run/0: jumping to instruction 20 +run/0: instruction init-array/21 +mem/0: location 1005 is 1030 +run/0: result 0 is 1030 +mem/0: storing 1030 in location 1 +run/0: instruction test-array-from-args/1 +run/0: ingredient 0 is 1 +mem/0: location 1 is 1030 +mem/0: location 1030 is 3 +mem/0: location 1031 is 0 +mem/0: location 1032 is 1 +mem/0: location 1033 is 2 +mem/0: storing 3 in location 2 +mem/0: storing 0 in location 3 +mem/0: storing 1 in location 4 +mem/0: storing 2 in location 5 diff --git a/cpp/062array.mu b/cpp/062array.mu new file mode 100644 index 00000000..3afecf5c --- /dev/null +++ b/cpp/062array.mu @@ -0,0 +1,40 @@ +scenario array-from-args [ + run [ + 1:address:array:location <- init-array 0:literal, 1:literal, 2:literal + 2:array:location <- copy 1:address:array:location/deref + ] + memory should contain [ + 2 <- 3 # array length + 3 <- 0 + 4 <- 1 + 5 <- 2 + ] +] + +# create an array out of a list of scalar args +recipe init-array [ + default-space:address:array:location <- new location:type, 30:literal + capacity:integer <- copy 0:literal + { + # while read curr-value + curr-value:location, exists?:boolean <- next-ingredient + break-unless exists?:boolean + capacity:integer <- add capacity:integer, 1:literal + loop + } + result:address:array:location <- new location:type, capacity:integer + rewind-ingredients + i:integer <- copy 0:literal + { + # while read curr-value + done?:boolean <- greater-or-equal i:integer, capacity:integer + break-if done?:boolean + curr-value:location, exists?:boolean <- next-ingredient + assert exists?:boolean, [error in rewinding ingredients to init-array] + tmp:address:location <- index-address result:address:array:location/deref, i:integer + tmp:address:location/deref <- copy curr-value:location + i:integer <- add i:integer, 1:literal + loop + } + reply result:address:array:location +] |