about summary refs log tree commit diff stats
path: root/013update_operation.cc
blob: 8ff8d62869ee3a6d4441e724c93078d652c24f70 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
//: Once all code is loaded, save operation ids of instructions and check that
//: nothing's undefined.

:(before "End Transforms")
Transform.push_back(update_instruction_operations);

:(code)
void update_instruction_operations(recipe_ordinal r) {
  trace(9991, "transform") << "--- compute instruction operations for recipe " << Recipe[r].name << end();
  for (long long int index = 0; index < SIZE(Recipe[r].steps); ++index) {
    instruction& inst = Recipe[r].steps.at(index);
    if (inst.is_label) continue;
    if (Recipe_ordinal.find(inst.name) == Recipe_ordinal.end()) {
      raise_error << maybe(Recipe[r].name) << "instruction " << inst.name << " has no recipe\n" << end();
      return;
    }
    inst.operation = Recipe_ordinal[inst.name];
  }
}

// hook to suppress inserting recipe name into errors and warnings (for later layers)
string maybe(string s) {
  return s + ": ";
}

// temporarily suppress run
void transform(string form) {
  load(form);
  transform_all();
}