about summary refs log tree commit diff stats
path: root/cpp/036call_ingredient.cc
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/036call_ingredient.cc')
-rw-r--r--cpp/036call_ingredient.cc129
1 files changed, 0 insertions, 129 deletions
diff --git a/cpp/036call_ingredient.cc b/cpp/036call_ingredient.cc
deleted file mode 100644
index 6224f8df..00000000
--- a/cpp/036call_ingredient.cc
+++ /dev/null
@@ -1,129 +0,0 @@
-//: Calls can take ingredients just like primitives. To access a recipe's
-//: ingredients, use 'next-ingredient'.
-
-:(scenario next_ingredient)
-recipe main [
-  f 2:literal
-]
-recipe f [
-  12:integer <- next-ingredient
-  13:integer <- add 1:literal, 12:integer
-]
-+run: instruction f/1
-+mem: location 12 is 2
-+mem: storing 3 in location 13
-
-:(scenario next_ingredient_missing)
-recipe main [
-  f
-]
-recipe f [
-  _, 12:integer <- next-ingredient
-]
-+mem: storing 0 in location 12
-
-:(before "End call Fields")
-vector<vector<long long int> > ingredient_atoms;
-index_t next_ingredient_to_process;
-:(replace{} "call(recipe_number r)")
-call(recipe_number r) :running_recipe(r), running_step_index(0), next_ingredient_to_process(0) {}
-
-:(replace "Current_routine->calls.push(call(current_instruction().operation))" following "End Primitive Recipe Implementations")
-call callee(current_instruction().operation);
-for (size_t i = 0; i < current_instruction().ingredients.size(); ++i) {
-  callee.ingredient_atoms.push_back(read_memory(current_instruction().ingredients[i]));
-}
-Current_routine->calls.push(callee);
-
-:(before "End Primitive Recipe Declarations")
-NEXT_INGREDIENT,
-:(before "End Primitive Recipe Numbers")
-Recipe_number["next-ingredient"] = NEXT_INGREDIENT;
-:(before "End Primitive Recipe Implementations")
-case NEXT_INGREDIENT: {
-  if (Current_routine->calls.top().next_ingredient_to_process < Current_routine->calls.top().ingredient_atoms.size()) {
-    trace("run") << "product 0 is "
-        << Current_routine->calls.top().ingredient_atoms[Current_routine->calls.top().next_ingredient_to_process][0];
-    write_memory(current_instruction().products[0],
-        Current_routine->calls.top().ingredient_atoms[Current_routine->calls.top().next_ingredient_to_process]);
-    if (current_instruction().products.size() > 1) {
-      vector<long long int> ingredient_exists;
-      ingredient_exists.push_back(1);
-      write_memory(current_instruction().products[1], ingredient_exists);
-    }
-    ++Current_routine->calls.top().next_ingredient_to_process;
-  }
-  else {
-    if (current_instruction().products.size() > 1) {
-      vector<long long int> no_ingredient;
-      no_ingredient.push_back(0);
-      write_memory(current_instruction().products[1], no_ingredient);
-    }
-  }
-  break;
-}
-
-:(scenario rewind_ingredients)
-recipe main [
-  f 2:literal
-]
-recipe f [
-  12:integer <- next-ingredient  # consume ingredient
-  _, 1:boolean <- next-ingredient  # will not find any ingredients
-  rewind-ingredients
-  13:integer, 2:boolean <- next-ingredient  # will find ingredient again
-]
-+mem: storing 2 in location 12
-+mem: storing 0 in location 1
-+mem: storing 2 in location 13
-+mem: storing 1 in location 2
-
-:(before "End Primitive Recipe Declarations")
-REWIND_INGREDIENTS,
-:(before "End Primitive Recipe Numbers")
-Recipe_number["rewind-ingredients"] = REWIND_INGREDIENTS;
-:(before "End Primitive Recipe Implementations")
-case REWIND_INGREDIENTS: {
-  Current_routine->calls.top().next_ingredient_to_process = 0;
-  break;
-}
-
-:(scenario ingredient)
-recipe main [
-  f 1:literal, 2:literal
-]
-recipe f [
-  12:integer <- ingredient 1:literal  # consume second ingredient first
-  13:integer, 1:boolean <- next-ingredient  # next-ingredient tries to scan past that
-]
-+mem: storing 2 in location 12
-+mem: storing 0 in location 1
-
-:(before "End Primitive Recipe Declarations")
-INGREDIENT,
-:(before "End Primitive Recipe Numbers")
-Recipe_number["ingredient"] = INGREDIENT;
-:(before "End Primitive Recipe Implementations")
-case INGREDIENT: {
-  if (static_cast<index_t>(current_instruction().ingredients[0].value) < Current_routine->calls.top().ingredient_atoms.size()) {
-    Current_routine->calls.top().next_ingredient_to_process = current_instruction().ingredients[0].value;
-    trace("run") << "product 0 is "
-        << Current_routine->calls.top().ingredient_atoms[Current_routine->calls.top().next_ingredient_to_process][0];
-    write_memory(current_instruction().products[0],
-        Current_routine->calls.top().ingredient_atoms[Current_routine->calls.top().next_ingredient_to_process]);
-    if (current_instruction().products.size() > 1) {
-      vector<long long int> ingredient_exists;
-      ingredient_exists.push_back(1);
-      write_memory(current_instruction().products[1], ingredient_exists);
-    }
-    ++Current_routine->calls.top().next_ingredient_to_process;
-  }
-  else {
-    if (current_instruction().products.size() > 1) {
-      vector<long long int> no_ingredient;
-      no_ingredient.push_back(0);
-      write_memory(current_instruction().products[1], no_ingredient);
-    }
-  }
-  break;
-}