blob: c02a24c55c2e6d6ff441d3a9b5e1dc0fc8f755f2 (
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
31
|
//: Once all code is loaded, save operation ids of instructions and check that
//: nothing's undefined.
:(before "End Instruction Modifying Transforms")
Transform.push_back(update_instruction_operations); // idempotent
:(code)
void update_instruction_operations(recipe_ordinal r) {
trace(9991, "transform") << "--- compute instruction operations for recipe " << get(Recipe, r).name << end();
//? cerr << "--- compute instruction operations for recipe " << get(Recipe, r).name << '\n';
for (long long int index = 0; index < SIZE(get(Recipe, r).steps); ++index) {
instruction& inst = get(Recipe, r).steps.at(index);
if (inst.is_label) continue;
if (!contains_key(Recipe_ordinal, inst.name)) {
raise_error << maybe(get(Recipe, r).name) << "instruction " << inst.name << " has no recipe\n" << end();
return;
}
inst.operation = get(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();
}
|