| 58 | } |
| 59 | |
| 60 | cmDefinitions cmDefinitions::MakeClosure(StackIter begin, StackIter end) |
| 61 | { |
| 62 | cmDefinitions closure; |
| 63 | std::unordered_set<cm::string_view> undefined; |
| 64 | for (StackIter it = begin; it != end; ++it) { |
| 65 | // Consider local definitions. |
| 66 | for (auto const& mi : it->Map) { |
| 67 | // Use this key if it is not already set or unset. |
| 68 | if (closure.Map.find(mi.first) == closure.Map.end() && |
| 69 | undefined.find(mi.first.view()) == undefined.end()) { |
| 70 | if (mi.second.Value) { |
| 71 | closure.Map.insert(mi); |
| 72 | } else { |
| 73 | undefined.emplace(mi.first.view()); |
| 74 | } |
| 75 | } |
| 76 | } |
| 77 | } |
| 78 | return closure; |
| 79 | } |
| 80 | |
| 81 | std::vector<std::string> cmDefinitions::ClosureKeys(StackIter begin, |
| 82 | StackIter end) |