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

Method run

libyul/optimiser/StackLimitEvader.cpp:126–160  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

124}
125
126Block StackLimitEvader::run(
127 OptimiserStepContext& _context,
128 Object const& _object
129)
130{
131 yulAssert(_object.hasCode());
132 auto const* evmDialect = dynamic_cast<EVMDialect const*>(&_context.dialect);
133 yulAssert(
134 evmDialect && evmDialect->providesObjectAccess(),
135 "StackLimitEvader can only be run on objects using the EVMDialect with object access."
136 );
137 yulAssert(
138 !evmDialect->eofVersion().has_value(),
139 "StackLimitEvader does not support EOF."
140 );
141 auto astRoot = std::get<Block>(ASTCopier{}(_object.code()->root()));
142 if (evmDialect && evmDialect->evmVersion().canOverchargeGasForCall())
143 {
144 yul::AsmAnalysisInfo analysisInfo = yul::AsmAnalyzer::analyzeStrictAssertCorrect(
145 *evmDialect,
146 astRoot,
147 _object.summarizeStructure()
148 );
149 std::unique_ptr<CFG> cfg = ControlFlowGraphBuilder::build(analysisInfo, *evmDialect, astRoot);
150 run(_context, astRoot, StackLayoutGenerator::reportStackTooDeep(*cfg, *evmDialect));
151 }
152 else
153 {
154 run(_context, astRoot, CompilabilityChecker{
155 _object,
156 true,
157 }.unreachableVariables);
158 }
159 return astRoot;
160}
161
162void StackLimitEvader::run(
163 OptimiserStepContext& _context,

Callers

nothing calls this directly

Calls 15

containsFunction · 0.85
literalArgumentValueFunction · 0.85
toCompactHexWithPrefixFunction · 0.85
hasCodeMethod · 0.80
providesObjectAccessMethod · 0.80
summarizeStructureMethod · 0.80
recursiveFunctionsMethod · 0.80
eofVersionMethod · 0.45
codeMethod · 0.45
evmVersionMethod · 0.45
findBuiltinMethod · 0.45

Tested by

no test coverage detected