about summary refs log tree commit diff stats
path: root/cpp/012run
diff options
context:
space:
mode:
authorKartik K. Agaram <vc@akkartik.com>2015-03-17 08:42:38 -0700
committerKartik K. Agaram <vc@akkartik.com>2015-03-17 09:06:48 -0700
commitb1bbe92da37dd44df458ffa122e052612bb9eff3 (patch)
tree976cde85c97d4877eb8c1e5151a919406fdd1049 /cpp/012run
parentc062697c9ff3c8cb0938f56bed3df2af3d122bd6 (diff)
downloadmu-b1bbe92da37dd44df458ffa122e052612bb9eff3.tar.gz
945 - move 'transform' layer to before 'run'
Diffstat (limited to 'cpp/012run')
-rw-r--r--cpp/012run152
1 files changed, 0 insertions, 152 deletions
diff --git a/cpp/012run b/cpp/012run
deleted file mode 100644
index f4dd6390..00000000
--- a/cpp/012run
+++ /dev/null
@@ -1,152 +0,0 @@
-:(scenarios run)
-:(scenario copy_literal)
-recipe main [
-  1:integer <- copy 23:literal
-]
-+run: instruction main/0
-+run: ingredient 0 is 23
-+mem: storing in location 1
-
-:(scenario copy)
-recipe main [
-  1:integer <- copy 23:literal
-  2:integer <- copy 1:integer
-]
-+run: instruction main/1
-+run: ingredient 0 is 1
-+mem: location 1 is 23
-+mem: storing in location 2
-
-:(before "End Types")
-// Book-keeping while running a recipe.
-//: Later layers will change this.
-struct routine {
-  recipe_number running_recipe;
-  size_t running_at;
-  routine(recipe_number r) :running_recipe(r), running_at(0) {}
-};
-
-:(code)
-void run(recipe_number r) {
-  run(routine(r));
-}
-
-void run(routine rr) {
-  while (!done(rr)) {
-    vector<instruction>& instructions = steps(rr);
-    size_t& pc = running_at(rr);
-    // Running one instruction.
-    if (instructions[pc].is_label) { ++pc; continue; }
-    trace("run") << "instruction " << recipe_name(rr) << '/' << pc;
-    switch (instructions[pc].operation) {
-      // Primitive Recipe Implementations.
-      case COPY: {
-        trace("run") << "ingredient 0 is " << instructions[pc].ingredients[0].name;
-        vector<int> data = read_memory(instructions[pc].ingredients[0]);
-        write_memory(instructions[pc].products[0], data);
-        break;
-      }
-      // End Primitive Recipe Implementations.
-      default: {
-        cout << "not a primitive op: " << instructions[pc].operation << '\n';
-      }
-    }
-    ++pc;
-  }
-}
-
-//: Some helpers.
-//: We'll need to override these later as we change the definition of routine.
-//: Important that they return referrences into the routine.
-inline size_t& running_at(routine& rr) {
-  return rr.running_at;
-}
-
-inline string recipe_name(routine& rr) {
-  return Recipe[rr.running_recipe].name;
-}
-
-inline vector<instruction>& steps(routine& rr) {
-  return Recipe[rr.running_recipe].steps;
-}
-
-inline bool done(routine& rr) {
-  return running_at(rr) >= steps(rr).size();
-}
-
-:(before "End Main")
-if (argc > 1) {
-  setup();
-  for (int i = 1; i < argc; ++i) {
-    ifstream fin(argv[i]);
-    while (!fin.eof()) add_recipe(fin);
-    fin.close();
-  }
-
-  recipe_number r = Recipe_number[string("main")];
-  if (r) run(r);
-  dump_memory();
-}
-
-//: helper for tests
-
-:(before "End Globals")
-// track recipes added so that we can cleanup after each test
-vector<recipe_number> recipes_added_by_test;
-
-:(code)
-void run(string form) {
-  vector<recipe_number> tmp = add_recipes(form);
-  recipes_added_by_test.insert(recipes_added_by_test.end(), tmp.begin(), tmp.end());
-  run(recipes_added_by_test.front());
-}
-
-:(before "End Setup")
-for (size_t i = 0; i < recipes_added_by_test.size(); ++i) {
-  Recipe_number.erase(Recipe[recipes_added_by_test[i]].name);
-  Recipe.erase(recipes_added_by_test[i]);
-}
-recipes_added_by_test.clear();
-
-:(code)
-vector<int> read_memory(reagent x) {
-//?   cout << "read_memory: " << x.to_string() << '\n'; //? 1
-  vector<int> result;
-  if (x.types[0] == 0) {  // literal
-    result.push_back(x.value);
-    return result;
-  }
-  int base = x.value;
-  for (size_t offset = 0; offset < Type[x.types[0]].size; ++offset) {
-    int val = Memory[base+offset];
-    trace("mem") << "location " << base+offset << " is " << val;
-    result.push_back(val);
-  }
-  return result;
-}
-
-void write_memory(reagent x, vector<int> data) {
-  int base = to_int(x.name);
-  size_t size = size_of(x);
-  if (size != data.size()) raise << "size mismatch in storing to " << x.to_string();
-  for (size_t offset = 0; offset < size; ++offset) {
-    trace("mem") << "storing in location " << base+offset;
-    Memory[base+offset] = data[offset];
-  }
-}
-
-:(code)
-size_t size_of(reagent r) {
-  type_info t = Type[r.types[0]];
-  if (!t.is_record && !t.is_array) return t.size;
-  return t.size;  // TODO
-}
-
-:(scenario run_label)
-recipe main [
-  +foo
-  1:integer <- copy 23:literal
-  2:integer <- copy 1:integer
-]
-+run: instruction main/1
-+run: instruction main/2