:(scenarios run) :(scenario copy_literal) recipe main [ 1:integer <- copy 23:literal ] +run: instruction 0 +run: ingredient 0 is 23 +mem: storing in location 1 :(code) void run(string form) { run(add_recipe(form)); } void run(recipe_number r) { vector& instructions(Recipe[r].steps); int n = 0; vector::iterator p; for (n = 0, p = instructions.begin(); p != instructions.end(); ++p, ++n) { trace("run") << "instruction " << n; switch (p->operation) { case 1: { // copy vector data = read_memory(p->ingredients[0]); trace("run") << "ingredient 0 is " << data[0]; write_memory(p->products[0], data); break; } default: raise << "undefined operation " << p->operation; } } } vector read_memory(reagent x) { vector result; result.push_back(to_int(x.name)); return result; } void write_memory(reagent x, vector data) { int dest = to_int(x.name); trace("mem") << "storing in location " << dest; Memory[dest] = data[0]; } int to_int(string n) { char* end = NULL; int result = strtol(n.c_str(), &end, /*any base*/0); assert(*end == '\0'); return result; }