MCPcopy Create free account
hub / github.com/argotorg/solidity / findFirstMatch

Method findFirstMatch

libyul/optimiser/SimplificationRules.cpp:40–70  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

38using namespace solidity::yul;
39
40SimplificationRules::Rule const* SimplificationRules::findFirstMatch(
41 Expression const& _expr,
42 Dialect const& _dialect,
43 std::function<AssignedValue const*(YulName)> const& _ssaValues
44)
45{
46 auto instruction = instructionAndArguments(_dialect, _expr);
47 if (!instruction)
48 return nullptr;
49
50 static std::map<std::optional<EVMVersion>, std::unique_ptr<SimplificationRules>> evmRules;
51
52 std::optional<EVMVersion> version;
53 if (yul::EVMDialect const* evmDialect = dynamic_cast<yul::EVMDialect const*>(&_dialect))
54 version = evmDialect->evmVersion();
55
56 if (!evmRules[version])
57 evmRules[version] = std::make_unique<SimplificationRules>(version);
58
59 SimplificationRules& rules = *evmRules[version];
60 assertThrow(rules.isInitialized(), OptimizerException, "Rule list not properly initialized.");
61
62 for (auto const& rule: rules.m_rules[uint8_t(instruction->first)])
63 {
64 rules.resetMatchGroups();
65 if (rule.pattern.matches(_expr, _dialect, _ssaValues))
66 if (!rule.feasible || rule.feasible())
67 return &rule;
68 }
69 return nullptr;
70}
71
72bool SimplificationRules::isInitialized() const
73{

Callers

nothing calls this directly

Calls 4

evmVersionMethod · 0.45
isInitializedMethod · 0.45
resetMatchGroupsMethod · 0.45
matchesMethod · 0.45

Tested by

no test coverage detected