1088 - start porting the 'buffer' type
This commit is contained in:
parent
7f931ef0f2
commit
0acfaaef6a
204
cpp/.traces/init-buffer-allocates
Normal file
204
cpp/.traces/init-buffer-allocates
Normal file
|
@ -0,0 +1,204 @@
|
|||
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: 100
|
||||
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: 23
|
||||
parse/0: ingredient: {name: "s1", value: 0, type: 2-5-4, properties: ["s1": "address":"array":"character", "deref": ]}
|
||||
parse/0: product: {name: "len1", value: 0, type: 1, properties: ["len1": "integer"]}
|
||||
parse/0: instruction: 99
|
||||
parse/0: ingredient: {name: "len1", value: 0, type: 1, properties: ["len1": "integer"]}
|
||||
parse/0: instruction: 99
|
||||
parse/0: ingredient: {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
|
||||
parse/0: instruction: 99
|
||||
parse/0: ingredient: {name: "x", value: 0, type: 2-9, properties: ["x": "address":"buffer"]}
|
||||
parse/0: instruction: 99
|
||||
parse/0: ingredient: {name: "
|
||||
", value: 0, type: 0, properties: ["
|
||||
": "literal-string"]}
|
||||
parse/0: instruction: 100
|
||||
parse/0: ingredient: {name: "4", value: 0, type: 0, properties: ["4": "literal"]}
|
||||
parse/0: product: {name: "y", value: 0, type: 2-9, properties: ["y": "address":"buffer"]}
|
||||
parse/0: instruction: 19
|
||||
parse/0: ingredient: {name: "y", value: 0, type: 2-9, properties: ["y": "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: 23
|
||||
parse/0: ingredient: {name: "s2", value: 0, type: 2-5-4, properties: ["s2": "address":"array":"character", "deref": ]}
|
||||
parse/0: product: {name: "len2", value: 0, type: 1, properties: ["len2": "integer"]}
|
||||
parse/0: instruction: 99
|
||||
parse/0: ingredient: {name: "len2", value: 0, type: 1, properties: ["len2": "integer"]}
|
||||
parse/0: instruction: 99
|
||||
parse/0: ingredient: {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
|
||||
parse/0: instruction: 99
|
||||
parse/0: ingredient: {name: "y", value: 0, type: 2-9, properties: ["y": "address":"buffer"]}
|
||||
parse/0: instruction: 99
|
||||
parse/0: ingredient: {name: "
|
||||
", value: 0, type: 0, properties: ["
|
||||
": "literal-string"]}
|
||||
parse/0: instruction: 3
|
||||
parse/0: ingredient: {name: "y", value: 0, type: 2-9, properties: ["y": "address":"buffer"]}
|
||||
parse/0: ingredient: {name: "x", value: 0, type: 2-9, properties: ["x": "address":"buffer"]}
|
||||
parse/0: product: {name: "1", value: 0, type: 1, properties: ["1": "integer", "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: assign len1 3
|
||||
name/0: assign y 4
|
||||
name/0: element data of type buffer is at offset 1
|
||||
name/0: assign s2 5
|
||||
name/0: assign len2 6
|
||||
after-brace/0: recipe test-init-buffer-allocates
|
||||
after-brace/0: new ...
|
||||
after-brace/0: init-buffer ...
|
||||
after-brace/0: get ...
|
||||
after-brace/0: length ...
|
||||
after-brace/0: $print ...
|
||||
after-brace/0: $print ...
|
||||
after-brace/0: $print ...
|
||||
after-brace/0: $print ...
|
||||
after-brace/0: init-buffer ...
|
||||
after-brace/0: get ...
|
||||
after-brace/0: length ...
|
||||
after-brace/0: $print ...
|
||||
after-brace/0: $print ...
|
||||
after-brace/0: $print ...
|
||||
after-brace/0: $print ...
|
||||
after-brace/0: subtract ...
|
||||
run/0: instruction test-init-buffer-allocates/0
|
||||
mem/0: new alloc: 1000
|
||||
mem/0: array size is 30
|
||||
run/0: instruction test-init-buffer-allocates/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-init-buffer-allocates/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 2062 is 0
|
||||
run/0: product 0 is 0
|
||||
mem/0: storing 0 in location 1003
|
||||
run/0: instruction test-init-buffer-allocates/3
|
||||
mem/0: location 1003 is 0
|
||||
mem/0: storing 0 in location 1004
|
||||
run/0: instruction test-init-buffer-allocates/4
|
||||
mem/0: location 1004 is 0
|
||||
run/0: $print: 0
|
||||
run/0: instruction test-init-buffer-allocates/5
|
||||
run/0: $print:
|
||||
run/0: instruction test-init-buffer-allocates/6
|
||||
mem/0: location 1002 is 1060
|
||||
run/0: $print: 1060
|
||||
run/0: instruction test-init-buffer-allocates/7
|
||||
run/0: $print:
|
||||
run/0: instruction test-init-buffer-allocates/8
|
||||
run/0: instruction init-buffer/0
|
||||
mem/0: new alloc: 1065
|
||||
mem/0: array size is 30
|
||||
run/0: instruction init-buffer/1
|
||||
mem/0: new alloc: 1095
|
||||
mem/0: storing 1095 in location 1067
|
||||
run/0: instruction init-buffer/2
|
||||
run/0: ingredient 0 is result
|
||||
mem/0: location 1067 is 1095
|
||||
run/0: ingredient 1 is length
|
||||
run/0: address to copy is 1095
|
||||
run/0: product 0 is 1095
|
||||
mem/0: storing 1095 in location 1068
|
||||
run/0: instruction init-buffer/3
|
||||
run/0: ingredient 0 is 0
|
||||
mem/0: location 1068 is 1095
|
||||
mem/0: storing 0 in location 1095
|
||||
run/0: instruction init-buffer/4
|
||||
run/0: ingredient 0 is result
|
||||
mem/0: location 1067 is 1095
|
||||
run/0: ingredient 1 is data
|
||||
run/0: address to copy is 1096
|
||||
run/0: product 0 is 1096
|
||||
mem/0: storing 1096 in location 1069
|
||||
run/0: instruction init-buffer/5
|
||||
run/0: product 0 is 4
|
||||
mem/0: storing 4 in location 1070
|
||||
run/0: instruction init-buffer/6
|
||||
mem/0: new alloc: 1097
|
||||
mem/0: location 1069 is 1096
|
||||
mem/0: storing 1097 in location 1096
|
||||
mem/0: location 1070 is 4
|
||||
mem/0: array size is 4
|
||||
run/0: instruction init-buffer/7
|
||||
mem/0: location 1067 is 1095
|
||||
run/0: result 0 is 1095
|
||||
mem/0: storing 1095 in location 1005
|
||||
run/0: instruction test-init-buffer-allocates/9
|
||||
run/0: ingredient 0 is y
|
||||
mem/0: location 1005 is 1095
|
||||
run/0: ingredient 1 is data
|
||||
run/0: address to copy is 1096
|
||||
run/0: its type is 2
|
||||
mem/0: location 2097 is 0
|
||||
run/0: product 0 is 0
|
||||
mem/0: storing 0 in location 1006
|
||||
run/0: instruction test-init-buffer-allocates/10
|
||||
mem/0: location 1006 is 0
|
||||
mem/0: storing 0 in location 1007
|
||||
run/0: instruction test-init-buffer-allocates/11
|
||||
mem/0: location 1007 is 0
|
||||
run/0: $print: 0
|
||||
run/0: instruction test-init-buffer-allocates/12
|
||||
run/0: $print:
|
||||
run/0: instruction test-init-buffer-allocates/13
|
||||
mem/0: location 1005 is 1095
|
||||
run/0: $print: 1095
|
||||
run/0: instruction test-init-buffer-allocates/14
|
||||
run/0: $print:
|
||||
run/0: instruction test-init-buffer-allocates/15
|
||||
run/0: ingredient 0 is y
|
||||
mem/0: location 1005 is 1095
|
||||
run/0: ingredient 1 is x
|
||||
mem/0: location 1002 is 1060
|
||||
run/0: product 0 is 35
|
||||
mem/0: storing 35 in location 1
|
|
@ -1,4 +1,8 @@
|
|||
//: Arrays contain a variable number of elements of the same type.
|
||||
//:
|
||||
//: You can create arrays of containers, but containers can only contain
|
||||
//: elements of a fixed size, so you can't create containers containing arrays.
|
||||
//: Create containers containing addresses to arrays instead.
|
||||
|
||||
:(scenario copy_array)
|
||||
# Arrays can be copied around with a single instruction just like integers,
|
||||
|
|
|
@ -40,6 +40,7 @@ recipe main [
|
|||
:(before "End size_of(types) Cases")
|
||||
if (t.kind == exclusive_container) {
|
||||
// size of an exclusive container is the size of its largest variant
|
||||
// (So like containers, it can't contain arrays.)
|
||||
//? cout << "--- " << types[0] << ' ' << t.size << '\n'; //? 1
|
||||
//? cout << "point: " << Type_number["point"] << " " << Type[Type_number["point"]].name << " " << Type[Type_number["point"]].size << '\n'; //? 1
|
||||
//? cout << t.name << ' ' << t.size << ' ' << t.elements.size() << '\n'; //? 1
|
||||
|
|
|
@ -19,9 +19,12 @@ for (size_t i = 0; i < Scenarios.size(); ++i) {
|
|||
Trace_file = Scenarios[i].name;
|
||||
START_TRACING_UNTIL_END_OF_SCOPE
|
||||
//? Trace_stream->dump_layer = "all"; //? 1
|
||||
//? cout << "before: " << Memory[1] << '\n'; //? 1
|
||||
//? Trace_stream->dump_layer = "all"; //? 1
|
||||
//? cout << "Before:\n"; dump_memory(); //? 1
|
||||
//? cout << Scenarios[i].to_run; //? 1
|
||||
//? cout << Scenarios[i].to_run; //? 2
|
||||
run(Scenarios[i].to_run);
|
||||
//? cout << "after: " << Memory[1] << '\n'; //? 1
|
||||
//? cout << "After:\n"; dump_memory(); //? 1
|
||||
for (map<int, int>::iterator p = Scenarios[i].memory_expectations.begin();
|
||||
p != Scenarios[i].memory_expectations.end();
|
||||
|
|
|
@ -96,3 +96,20 @@ scenario string-equal-common-lengths-but-distinct [
|
|||
3 <- 0 # abc != abd
|
||||
]
|
||||
]
|
||||
|
||||
# A new type to help incrementally construct strings.
|
||||
container buffer [
|
||||
length:integer
|
||||
data:address:array:character
|
||||
]
|
||||
|
||||
recipe init-buffer [
|
||||
default-space:address:space <- new location:type, 30:literal
|
||||
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
|
||||
reply result:address:buffer
|
||||
]
|
||||
|
|
Loading…
Reference in New Issue
Block a user