mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Avoid copying sorts.
This commit is contained in:
parent
87bffbba98
commit
cc3c2138a6
@ -140,7 +140,7 @@ bool isNumber(string_view const& _expr)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
smtutil::Expression toSMTUtilExpression(SMTLib2Expression const& _expr, map<string, SortPointer> const& _variableSorts)
|
smtutil::Expression toSMTUtilExpression(SMTLib2Expression const& _expr, map<string, SortPointer>& _variableSorts)
|
||||||
{
|
{
|
||||||
return std::visit(GenericVisitor{
|
return std::visit(GenericVisitor{
|
||||||
[&](string_view const& _atom) {
|
[&](string_view const& _atom) {
|
||||||
@ -157,8 +157,7 @@ smtutil::Expression toSMTUtilExpression(SMTLib2Expression const& _expr, map<stri
|
|||||||
string_view op = get<string_view>(_subExpr.front().data);
|
string_view op = get<string_view>(_subExpr.front().data);
|
||||||
if (op == "let")
|
if (op == "let")
|
||||||
{
|
{
|
||||||
// TODO would be good if we did not have to copy this here.
|
map<string, SortPointer> subSorts;
|
||||||
map<string, SortPointer> subSorts = _variableSorts;
|
|
||||||
solAssert(_subExpr.size() == 3);
|
solAssert(_subExpr.size() == 3);
|
||||||
// We change the nesting here:
|
// We change the nesting here:
|
||||||
// (let ((x1 t1) (x2 t2)) T) -> let(x1(t1), x2(t2), T)
|
// (let ((x1 t1) (x2 t2)) T) -> let(x1(t1), x2(t2), T)
|
||||||
@ -174,7 +173,11 @@ smtutil::Expression toSMTUtilExpression(SMTLib2Expression const& _expr, map<stri
|
|||||||
subSorts[string(varName)] = replacement.sort;
|
subSorts[string(varName)] = replacement.sort;
|
||||||
arguments.emplace_back(Expression(string(varName), {move(replacement)}, replacement.sort));
|
arguments.emplace_back(Expression(string(varName), {move(replacement)}, replacement.sort));
|
||||||
}
|
}
|
||||||
arguments.emplace_back(toSMTUtilExpression(_subExpr.at(2), subSorts));
|
for (auto&& [name, value]: subSorts)
|
||||||
|
_variableSorts[name] = value;
|
||||||
|
arguments.emplace_back(toSMTUtilExpression(_subExpr.at(2), _variableSorts));
|
||||||
|
for (auto const& var: subSorts)
|
||||||
|
_variableSorts.erase(var.first);
|
||||||
sort = arguments.back().sort;
|
sort = arguments.back().sort;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
Loading…
Reference in New Issue
Block a user