Add and use cxx20::ranges::all_of.

This commit is contained in:
Daniel Kirchner 2021-01-05 14:55:36 +01:00
parent 970e8064bb
commit 3ed55613ba
2 changed files with 15 additions and 4 deletions

View File

@ -49,4 +49,16 @@ erase_if(std::unordered_map<Key,T,Hash,KeyEqual,Alloc>& c, Pred pred)
return old_size - c.size();
}
namespace ranges
{
template<typename R, typename Pred>
inline constexpr bool all_of(R&& r, Pred pred)
{
for (auto it = std::begin(r), end = std::end(r); it != end; ++it)
if (!std::invoke(pred, *it))
return false;
return true;
}
}
}

View File

@ -26,6 +26,8 @@
#include <libyul/Exceptions.h>
#include <libyul/AST.h>
#include <libsolutil/cxx20.h>
using namespace std;
using namespace solidity;
using namespace solidity::yul;
@ -86,10 +88,7 @@ void Rematerialiser::visit(Expression& _e)
)
{
assertThrow(m_referenceCounts[name] > 0, OptimizerException, "");
bool allInScope = true;
for (auto const& ref: m_references[name])
allInScope = allInScope && inScope(ref);
if (allInScope)
if (cxx20::ranges::all_of(m_references[name], [&](auto const& ref) { return inScope(ref); }))
{
// update reference counts
m_referenceCounts[name]--;