diff options
author | Kartik K. Agaram <vc@akkartik.com> | 2015-08-05 15:22:24 -0700 |
---|---|---|
committer | Kartik K. Agaram <vc@akkartik.com> | 2015-08-05 15:22:24 -0700 |
commit | 310308ce45ec458c1038cfcf1c7d037160e7bddb (patch) | |
tree | 58e1faf53996a672e6b37d249ac917bb7482677c /052tangle.cc | |
parent | 0fe9a1812353969deba687f4de06eb28bd615dfa (diff) | |
download | mu-310308ce45ec458c1038cfcf1c7d037160e7bddb.tar.gz |
1938 - warn on unused before/after fragments
Diffstat (limited to '052tangle.cc')
-rw-r--r-- | 052tangle.cc | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/052tangle.cc b/052tangle.cc index 743d6945..dd317b42 100644 --- a/052tangle.cc +++ b/052tangle.cc @@ -22,19 +22,23 @@ $mem: 3 :(before "End Globals") map<string /*label*/, recipe> Before_fragments, After_fragments; +set<string /*label*/> Fragments_used; :(before "End Setup") Before_fragments.clear(); After_fragments.clear(); +Fragments_used.clear(); :(before "End Command Handlers") else if (command == "before") { string label = next_word(in); recipe tmp = slurp_recipe(in); +//? cerr << "adding before fragment " << label << '\n'; //? 1 Before_fragments[label].steps.insert(Before_fragments[label].steps.end(), tmp.steps.begin(), tmp.steps.end()); } else if (command == "after") { string label = next_word(in); recipe tmp = slurp_recipe(in); +//? cerr << "adding after fragment " << label << '\n'; //? 1 After_fragments[label].steps.insert(After_fragments[label].steps.begin(), tmp.steps.begin(), tmp.steps.end()); } @@ -55,10 +59,14 @@ void insert_fragments(const recipe_ordinal r) { continue; } if (Before_fragments.find(inst.label) != Before_fragments.end()) { +//? cerr << "loading code before " << inst.label << '\n'; //? 1 + Fragments_used.insert(inst.label); result.insert(result.end(), Before_fragments[inst.label].steps.begin(), Before_fragments[inst.label].steps.end()); } result.push_back(inst); if (After_fragments.find(inst.label) != After_fragments.end()) { +//? cerr << "loading code after " << inst.label << '\n'; //? 1 + Fragments_used.insert(inst.label); result.insert(result.end(), After_fragments[inst.label].steps.begin(), After_fragments[inst.label].steps.end()); } } @@ -68,6 +76,25 @@ void insert_fragments(const recipe_ordinal r) { Recipe[r].steps.swap(result); } +//: warn about unapplied fragments +:(before "End Globals") +bool Transform_check_insert_fragments_Ran = false; +:(before "End One-time Setup") +Transform.push_back(check_insert_fragments); // final transform +:(code) +void check_insert_fragments(unused recipe_ordinal) { + if (Transform_check_insert_fragments_Ran) return; + Transform_check_insert_fragments_Ran = true; + for (map<string, recipe>::iterator p = Before_fragments.begin(); p != Before_fragments.end(); ++p) { + if (Fragments_used.find(p->first) == Fragments_used.end()) + raise << "could not locate insert before " << p->first << '\n' << end(); + } + for (map<string, recipe>::iterator p = After_fragments.begin(); p != After_fragments.end(); ++p) { + if (Fragments_used.find(p->first) == Fragments_used.end()) + raise << "could not locate insert after " << p->first << '\n' << end(); + } +} + :(scenario tangle_before_and_after) recipe main [ 1:number <- copy 0 |