diff options
author | Kartik K. Agaram <vc@akkartik.com> | 2015-04-24 20:07:17 -0700 |
---|---|---|
committer | Kartik K. Agaram <vc@akkartik.com> | 2015-04-24 20:16:21 -0700 |
commit | dcfca05e08744270b3145f7906c5cd46485a4b52 (patch) | |
tree | 673e8715688bdc3990bbfe9077158e764690ec01 /cpp/036call_ingredient | |
parent | 69e14325e3eaa3722766bb9706d7da5862b6ea26 (diff) | |
download | mu-dcfca05e08744270b3145f7906c5cd46485a4b52.tar.gz |
1171
Chip away at eliminating that 'pc' reference by first throwing out the most common expression that uses it: instructions[pc].
Diffstat (limited to 'cpp/036call_ingredient')
-rw-r--r-- | cpp/036call_ingredient | 30 |
1 files changed, 15 insertions, 15 deletions
diff --git a/cpp/036call_ingredient b/cpp/036call_ingredient index 5c222fc4..08894690 100644 --- a/cpp/036call_ingredient +++ b/cpp/036call_ingredient @@ -28,9 +28,9 @@ size_t next_ingredient_to_process; :(replace{} "call(recipe_number r)") call(recipe_number r) :running_recipe(r), pc(0), next_ingredient_to_process(0) {} -:(replace "Current_routine->calls.push(call(instructions[pc].operation))" following "End Primitive Recipe Implementations") -call callee(instructions[pc].operation); -for (vector<reagent>::iterator p = instructions[pc].ingredients.begin(); p != instructions[pc].ingredients.end(); ++p) { +:(replace "Current_routine->calls.push(call(current_instruction().operation))" following "End Primitive Recipe Implementations") +call callee(current_instruction().operation); +for (vector<reagent>::const_iterator p = current_instruction().ingredients.begin(); p != current_instruction().ingredients.end(); ++p) { callee.ingredient_atoms.push_back(read_memory(*p)); } Current_routine->calls.push(callee); @@ -44,20 +44,20 @@ 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(instructions[pc].products[0], + write_memory(current_instruction().products[0], Current_routine->calls.top().ingredient_atoms[Current_routine->calls.top().next_ingredient_to_process]); - if (instructions[pc].products.size() > 1) { + if (current_instruction().products.size() > 1) { vector<int> ingredient_exists; ingredient_exists.push_back(1); - write_memory(instructions[pc].products[1], ingredient_exists); + write_memory(current_instruction().products[1], ingredient_exists); } ++Current_routine->calls.top().next_ingredient_to_process; } else { - if (instructions[pc].products.size() > 1) { + if (current_instruction().products.size() > 1) { vector<int> no_ingredient; no_ingredient.push_back(0); - write_memory(instructions[pc].products[1], no_ingredient); + write_memory(current_instruction().products[1], no_ingredient); } } break; @@ -105,24 +105,24 @@ INGREDIENT, Recipe_number["ingredient"] = INGREDIENT; :(before "End Primitive Recipe Implementations") case INGREDIENT: { - if (static_cast<size_t>(instructions[pc].ingredients[0].value) < Current_routine->calls.top().ingredient_atoms.size()) { - Current_routine->calls.top().next_ingredient_to_process = instructions[pc].ingredients[0].value; + if (static_cast<size_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(instructions[pc].products[0], + write_memory(current_instruction().products[0], Current_routine->calls.top().ingredient_atoms[Current_routine->calls.top().next_ingredient_to_process]); - if (instructions[pc].products.size() > 1) { + if (current_instruction().products.size() > 1) { vector<int> ingredient_exists; ingredient_exists.push_back(1); - write_memory(instructions[pc].products[1], ingredient_exists); + write_memory(current_instruction().products[1], ingredient_exists); } ++Current_routine->calls.top().next_ingredient_to_process; } else { - if (instructions[pc].products.size() > 1) { + if (current_instruction().products.size() > 1) { vector<int> no_ingredient; no_ingredient.push_back(0); - write_memory(instructions[pc].products[1], no_ingredient); + write_memory(current_instruction().products[1], no_ingredient); } } break; |