mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
[yulopti] Rewrite the check against overlapping abbreviations using ranges-v3
This commit is contained in:
parent
88a7dddfbd
commit
0f75582e12
@ -44,13 +44,17 @@
|
|||||||
#include <libsolutil/JSON.h>
|
#include <libsolutil/JSON.h>
|
||||||
|
|
||||||
#include <boost/algorithm/string/predicate.hpp>
|
#include <boost/algorithm/string/predicate.hpp>
|
||||||
|
#include <boost/algorithm/string/join.hpp>
|
||||||
#include <boost/program_options.hpp>
|
#include <boost/program_options.hpp>
|
||||||
|
|
||||||
#include <range/v3/action/sort.hpp>
|
#include <range/v3/action/sort.hpp>
|
||||||
#include <range/v3/range/conversion.hpp>
|
#include <range/v3/range/conversion.hpp>
|
||||||
#include <range/v3/view/concat.hpp>
|
#include <range/v3/view/concat.hpp>
|
||||||
#include <range/v3/view/drop.hpp>
|
#include <range/v3/view/drop.hpp>
|
||||||
|
#include <range/v3/view/map.hpp>
|
||||||
|
#include <range/v3/view/set_algorithm.hpp>
|
||||||
#include <range/v3/view/stride.hpp>
|
#include <range/v3/view/stride.hpp>
|
||||||
|
#include <range/v3/view/transform.hpp>
|
||||||
|
|
||||||
#include <cctype>
|
#include <cctype>
|
||||||
#include <string>
|
#include <string>
|
||||||
@ -119,18 +123,19 @@ public:
|
|||||||
max_element(_extraOptions.begin(), _extraOptions.end(), hasShorterString)->second.size()
|
max_element(_extraOptions.begin(), _extraOptions.end(), hasShorterString)->second.size()
|
||||||
);
|
);
|
||||||
|
|
||||||
for (auto const& optionAndDescription: _extraOptions)
|
vector<string> overlappingAbbreviations =
|
||||||
{
|
ranges::views::set_intersection(_extraOptions | views::keys, _optimizationSteps | views::keys) |
|
||||||
|
views::transform([](char _abbreviation){ return string(1, _abbreviation); }) |
|
||||||
|
to<vector>();
|
||||||
|
|
||||||
yulAssert(
|
yulAssert(
|
||||||
_optimizationSteps.count(optionAndDescription.first) == 0,
|
overlappingAbbreviations.empty(),
|
||||||
"ERROR: Conflict between yulopti controls and Yul optimizer step abbreviations.\n"
|
"ERROR: Conflict between yulopti controls and the following Yul optimizer step abbreviations: " +
|
||||||
"Character '" + string(1, optionAndDescription.first) + "' is assigned to both " +
|
boost::join(overlappingAbbreviations, ", ") + ".\n"
|
||||||
optionAndDescription.second + " and " + _optimizationSteps.at(optionAndDescription.first) + " step.\n"
|
|
||||||
"This is most likely caused by someone adding a new step abbreviation to "
|
"This is most likely caused by someone adding a new step abbreviation to "
|
||||||
"OptimiserSuite::stepNameToAbbreviationMap() and not realizing that it's used by yulopti.\n"
|
"OptimiserSuite::stepNameToAbbreviationMap() and not realizing that it's used by yulopti.\n"
|
||||||
"Please update the code to use a different character and recompile yulopti."
|
"Please update the code to use a different character and recompile yulopti."
|
||||||
);
|
);
|
||||||
}
|
|
||||||
|
|
||||||
vector<tuple<char, string>> sortedOptions =
|
vector<tuple<char, string>> sortedOptions =
|
||||||
views::concat(_optimizationSteps, _extraOptions) |
|
views::concat(_optimizationSteps, _extraOptions) |
|
||||||
|
Loading…
Reference in New Issue
Block a user