This commit is contained in:
Leonardo Alt
2021-01-06 10:17:17 +01:00
parent fce6d99900
commit ced79497f5
2 changed files with 22 additions and 20 deletions
+16 -14
View File
@@ -125,21 +125,23 @@ map<YulString, SideEffects> SideEffectsPropagator::sideEffects(
{
YulString funName = call.first;
SideEffects sideEffects;
util::BreadthFirstSearch<YulString>{call.second, {funName}}.run(
[&](YulString _function, auto&& _addChild) {
if (sideEffects == SideEffects::worst())
return;
if (BuiltinFunction const* f = _dialect.builtin(_function))
sideEffects += f->sideEffects;
else
{
if (ret.count(_function))
sideEffects += ret[_function];
for (YulString callee: _directCallGraph.functionCalls.at(_function))
_addChild(callee);
}
auto _visit = [&, visited = std::set<YulString>{}](YulString _function, auto&& _recurse) mutable {
if (!visited.insert(_function).second)
return;
if (sideEffects == SideEffects::worst())
return;
if (BuiltinFunction const* f = _dialect.builtin(_function))
sideEffects += f->sideEffects;
else
{
if (ret.count(_function))
sideEffects += ret[_function];
for (YulString callee: _directCallGraph.functionCalls.at(_function))
_recurse(callee, _recurse);
}
);
};
for (auto const& _v: call.second)
_visit(_v, _visit);
ret[funName] += sideEffects;
}
return ret;