diff options
author | Kartik K. Agaram <vc@akkartik.com> | 2015-03-26 20:24:38 -0700 |
---|---|---|
committer | Kartik K. Agaram <vc@akkartik.com> | 2015-03-26 20:24:38 -0700 |
commit | 3076bab4b62ce2b56c53db6d0b1715429c5bda27 (patch) | |
tree | 08c0da74ffee65301953c1186bb7aef1970db16d /cpp/020array | |
parent | 62ed0e4728ab0238c47f03dea38782a599bff3fb (diff) | |
download | mu-3076bab4b62ce2b56c53db6d0b1715429c5bda27.tar.gz |
979
Diffstat (limited to 'cpp/020array')
-rw-r--r-- | cpp/020array | 23 |
1 files changed, 8 insertions, 15 deletions
diff --git a/cpp/020array b/cpp/020array index 96591366..5e086ebc 100644 --- a/cpp/020array +++ b/cpp/020array @@ -32,15 +32,12 @@ recipe main [ +mem: storing 15 in location 7 +mem: storing 16 in location 8 -:(before "End size_of Cases") -if (t.is_array) { - int base = r.value; - if (Memory[base] == 0) return 0; - reagent x; - x.set_value(base+1); - x.types.push_back(t.element[0]); - return 1 + Memory[base]*size_of(x); -} +:(after "size_t size_of(const reagent& r)") + const type_info& t = Type[r.types[0]]; + if (t.is_array) { + int base = r.value; + return 1 + Memory[base]*size_of(t.element); + } :(before "End Globals") // Operator to look at elements of arrays. @@ -58,9 +55,7 @@ case INDEX: { assert(Type[base_type].is_array); trace("run") << "ingredient 1 is " << instructions[pc].ingredients[1].name; size_t offset = instructions[pc].ingredients[1].value; - reagent elem; - elem.types.push_back(Type[base_type].element[0]); - int src = base_address + 1 + offset*size_of(elem); + int src = base_address + 1 + offset*size_of(Type[base_type].element); trace("run") << "address to copy is " << src; int src_type = Type[base_type].element[0]; trace("run") << "its type is " << src_type; @@ -106,9 +101,7 @@ case INDEX_ADDRESS: { assert(Type[base_type].is_array); trace("run") << "ingredient 1 is " << instructions[pc].ingredients[1].name; size_t offset = instructions[pc].ingredients[1].value; - reagent elem; - elem.types.push_back(Type[base_type].element[0]); - int src = base_address + 1 + offset*size_of(elem); + int src = base_address + 1 + offset*size_of(Type[base_type].element); trace("run") << "address to copy is " << src; vector<int> result; result.push_back(src); |