From c495d2ac7ca0d7f1c1a9bbb7d1ad5072a7eface5 Mon Sep 17 00:00:00 2001 From: "Kartik K. Agaram" Date: Fri, 17 Apr 2015 11:00:56 -0700 Subject: 1075 --- cpp/033length | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 cpp/033length (limited to 'cpp/033length') diff --git a/cpp/033length b/cpp/033length new file mode 100644 index 00000000..9d3bb714 --- /dev/null +++ b/cpp/033length @@ -0,0 +1,30 @@ +//: Recipe to compute the length of an array. + +:(scenario "array_length") +recipe main [ + 1:integer <- copy 3:literal + 2:integer <- copy 14:literal + 3:integer <- copy 15:literal + 4:integer <- copy 16:literal + 5:integer <- length 1:array:integer +] ++run: instruction main/4 ++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(instructions[pc].ingredients[0]); + if (x.types[0] != Type_number["array"]) { + raise << "tried to calculate length of non-array " << x.to_string() << '\n'; + break; + } + vector result; +//? cout << "length: " << x.value << '\n'; //? 1 + result.push_back(Memory[x.value]); + write_memory(instructions[pc].products[0], result); + break; +} -- cgit 1.4.1-2-gfad0