diff options
author | Kartik K. Agaram <vc@akkartik.com> | 2015-05-26 15:16:36 -0700 |
---|---|---|
committer | Kartik K. Agaram <vc@akkartik.com> | 2015-05-26 15:16:36 -0700 |
commit | c8a58cdc8cc3353de3a42a9f53e5c4759ef9701a (patch) | |
tree | 367f52a1cc671b73696abf3f905632b195f95e1a /032array.cc | |
parent | 5b84f01fdcf30ffb62d53ed6f5886f626d47bcfa (diff) | |
download | mu-c8a58cdc8cc3353de3a42a9f53e5c4759ef9701a.tar.gz |
1473
Diffstat (limited to '032array.cc')
-rw-r--r-- | 032array.cc | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/032array.cc b/032array.cc index deef886e..0d8efc5c 100644 --- a/032array.cc +++ b/032array.cc @@ -139,3 +139,31 @@ case INDEX_ADDRESS: { products.at(0).push_back(result); break; } + +//:: compute the length of an array + +:(scenario array_length) +recipe main [ + 1:number <- copy 3:literal # length + 2:number <- copy 14:literal + 3:number <- copy 15:literal + 4:number <- copy 16:literal + 5:number <- length 1:array:number +] ++mem: storing 3 in location 5 + +:(before "End Primitive Recipe Declarations") +LENGTH, +:(before "End Primitive Recipe Numbers") +Recipe_number["length"] = LENGTH; +:(before "End Primitive Recipe Implementations") +case LENGTH: { + reagent x = canonize(current_instruction().ingredients.at(0)); + if (x.types.at(0) != Type_number["array"]) { + raise << "tried to calculate length of non-array " << x.to_string() << '\n'; + break; + } + products.resize(1); + products.at(0).push_back(Memory[x.value]); + break; +} |