AbstractValueKind meet_like_operation()

in include/HashedAbstractEnvironment.h [367:387]


  AbstractValueKind meet_like_operation(
      const MapValue& other,
      std::function<void(Domain*, const Domain&)> operation) {
    for (const auto& other_binding : other.m_map) {
      auto binding = m_map.find(other_binding.first);
      if (binding == m_map.end()) {
        // The value is Top, we just insert the other value (Top is the identity
        // for meet-like operations).
        m_map[other_binding.first] = other_binding.second;
      } else {
        // We compute the meet-like combination of the values.
        operation(&binding->second, other_binding.second);
        if (binding->second.is_bottom()) {
          // If the result is Bottom, the entire environment becomes Bottom.
          clear();
          return AbstractValueKind::Bottom;
        }
      }
    }
    return kind();
  }