https://github.com/akkartik/mu/blob/master/013update_operation.cc
1
2
3
4 :(before "End Instruction Modifying Transforms")
5 Transform.push_back(update_instruction_operations);
6
7 :(code)
8 void update_instruction_operations(const recipe_ordinal r) {
9 trace(9991, "transform") << "--- compute instruction operations for recipe " << get(Recipe, r).name << end();
10 recipe& caller = get(Recipe, r);
11
12 for (int index = 0; index < SIZE(caller.steps); ++index) {
13 instruction& inst = caller.steps.at(index);
14 if (inst.is_label) continue;
15 if (!contains_key(Recipe_ordinal, inst.name)) {
16 raise << maybe(caller.name) << "instruction '" << inst.name << "' has no recipe in '" << to_original_string(inst) << "'\n" << end();
17 continue;
18 }
19 inst.operation = get(Recipe_ordinal, inst.name);
20
21 }
22 }
23
24
25 string maybe(string recipe_name) {
26
27 return recipe_name + ": ";
28 }
29
30 :(scenarios transform)
31 :(scenario missing_arrow)
32 % Hide_errors = true;
33 def main [
34 1:number , copy 0
35 ]
36 +error: main: instruction '1:number' has no recipe in '1:number copy, 0'