Skip to content

Commit ae538de

Browse files
committed
Yul Dialect: Rename functions to function handles
1 parent 0874c2d commit ae538de

12 files changed

+39
-40
lines changed

libyul/Dialect.h

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -74,16 +74,15 @@ struct Dialect
7474
/// @returns true if the identifier is reserved. This includes the builtins too.
7575
virtual bool reservedIdentifier(std::string_view _name) const { return findBuiltin(_name).has_value(); }
7676

77-
// todo these are handles, not functions
78-
virtual std::optional<BuiltinHandle> discardFunction() const { return std::nullopt; }
79-
virtual std::optional<BuiltinHandle> equalityFunction() const { return std::nullopt; }
80-
virtual std::optional<BuiltinHandle> booleanNegationFunction() const { return std::nullopt; }
81-
82-
virtual std::optional<BuiltinHandle> memoryStoreFunction() const { return std::nullopt; }
83-
virtual std::optional<BuiltinHandle> memoryLoadFunction() const { return std::nullopt; }
84-
virtual std::optional<BuiltinHandle> storageStoreFunction() const { return std::nullopt; }
85-
virtual std::optional<BuiltinHandle> storageLoadFunction() const { return std::nullopt; }
86-
virtual std::optional<BuiltinHandle> hashFunction() const { return std::nullopt; }
77+
virtual std::optional<BuiltinHandle> discardFunctionHandle() const { return std::nullopt; }
78+
virtual std::optional<BuiltinHandle> equalityFunctionHandle() const { return std::nullopt; }
79+
virtual std::optional<BuiltinHandle> booleanNegationFunctionHandle() const { return std::nullopt; }
80+
81+
virtual std::optional<BuiltinHandle> memoryStoreFunctionHandle() const { return std::nullopt; }
82+
virtual std::optional<BuiltinHandle> memoryLoadFunctionHandle() const { return std::nullopt; }
83+
virtual std::optional<BuiltinHandle> storageStoreFunctionHandle() const { return std::nullopt; }
84+
virtual std::optional<BuiltinHandle> storageLoadFunctionHandle() const { return std::nullopt; }
85+
virtual std::optional<BuiltinHandle> hashFunctionHandle() const { return std::nullopt; }
8786

8887
Literal zeroLiteral() const;
8988

libyul/backends/evm/ControlFlowGraphBuilder.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -349,7 +349,7 @@ void ControlFlowGraphBuilder::operator()(Switch const& _switch)
349349
CFG::Assignment{_switch.debugData, {ghostVarSlot}}
350350
});
351351

352-
std::optional<BuiltinHandle> const& equalityBuiltinHandle = m_dialect.equalityFunction();
352+
std::optional<BuiltinHandle> const& equalityBuiltinHandle = m_dialect.equalityFunctionHandle();
353353
yulAssert(equalityBuiltinHandle);
354354

355355
// Artificially generate:

libyul/backends/evm/EVMDialect.h

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -75,14 +75,14 @@ class EVMDialect: public Dialect
7575
/// @returns true if the identifier is reserved. This includes the builtins too.
7676
bool reservedIdentifier(std::string_view _name) const override;
7777

78-
std::optional<BuiltinHandle> discardFunction() const override { return m_discardFunction; }
79-
std::optional<BuiltinHandle> equalityFunction() const override { return m_equalityFunction; }
80-
std::optional<BuiltinHandle> booleanNegationFunction() const override { return m_booleanNegationFunction; }
81-
std::optional<BuiltinHandle> memoryStoreFunction() const override { return m_memoryStoreFunction; }
82-
std::optional<BuiltinHandle> memoryLoadFunction() const override { return m_memoryLoadFunction; }
83-
std::optional<BuiltinHandle> storageStoreFunction() const override { return m_storageStoreFunction; }
84-
std::optional<BuiltinHandle> storageLoadFunction() const override { return m_storageLoadFunction; }
85-
std::optional<BuiltinHandle> hashFunction() const override { return m_hashFunction; }
78+
std::optional<BuiltinHandle> discardFunctionHandle() const override { return m_discardFunction; }
79+
std::optional<BuiltinHandle> equalityFunctionHandle() const override { return m_equalityFunction; }
80+
std::optional<BuiltinHandle> booleanNegationFunctionHandle() const override { return m_booleanNegationFunction; }
81+
std::optional<BuiltinHandle> memoryStoreFunctionHandle() const override { return m_memoryStoreFunction; }
82+
std::optional<BuiltinHandle> memoryLoadFunctionHandle() const override { return m_memoryLoadFunction; }
83+
std::optional<BuiltinHandle> storageStoreFunctionHandle() const override { return m_storageStoreFunction; }
84+
std::optional<BuiltinHandle> storageLoadFunctionHandle() const override { return m_storageLoadFunction; }
85+
std::optional<BuiltinHandle> hashFunctionHandle() const override { return m_hashFunction; }
8686

8787
static EVMDialect const& strictAssemblyForEVM(langutil::EVMVersion _evmVersion, std::optional<uint8_t> _eofVersion);
8888
static EVMDialect const& strictAssemblyForEVMObjects(langutil::EVMVersion _evmVersion, std::optional<uint8_t> _eofVersion);

libyul/backends/evm/EVMMetrics.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
namespace solidity::yul
3030
{
3131

32-
struct EVMDialect;
32+
class EVMDialect;
3333

3434
/**
3535
* Gas meter for expressions only involving literals, identifiers and

libyul/backends/evm/EVMObjectCompiler.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ namespace solidity::yul
2828
{
2929
struct Object;
3030
class AbstractAssembly;
31-
struct EVMDialect;
31+
class EVMDialect;
3232

3333
class EVMObjectCompiler
3434
{

libyul/optimiser/ControlFlowSimplifier.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -136,12 +136,12 @@ void ControlFlowSimplifier::simplify(std::vector<yul::Statement>& _statements)
136136
GenericVisitor visitor{
137137
VisitorFallback<OptionalStatements>{},
138138
[&](If& _ifStmt) -> OptionalStatements {
139-
if (_ifStmt.body.statements.empty() && m_dialect.discardFunction())
139+
if (_ifStmt.body.statements.empty() && m_dialect.discardFunctionHandle())
140140
{
141141
OptionalStatements s = std::vector<Statement>{};
142142
s->emplace_back(makeDiscardCall(
143143
_ifStmt.debugData,
144-
m_dialect.builtin(*m_dialect.discardFunction()),
144+
m_dialect.builtin(*m_dialect.discardFunctionHandle()),
145145
std::move(*_ifStmt.condition)
146146
));
147147
return s;
@@ -178,7 +178,7 @@ OptionalStatements ControlFlowSimplifier::reduceNoCaseSwitch(Switch& _switchStmt
178178
{
179179
yulAssert(_switchStmt.cases.empty(), "Expected no case!");
180180
std::optional<BuiltinHandle> discardFunctionHandle =
181-
m_dialect.discardFunction();
181+
m_dialect.discardFunctionHandle();
182182
if (!discardFunctionHandle)
183183
return {};
184184

@@ -197,27 +197,27 @@ OptionalStatements ControlFlowSimplifier::reduceSingleCaseSwitch(Switch& _switch
197197
langutil::DebugData::ConstPtr debugData = debugDataOf(*_switchStmt.expression);
198198
if (switchCase.value)
199199
{
200-
if (!m_dialect.equalityFunction())
200+
if (!m_dialect.equalityFunctionHandle())
201201
return {};
202202
return make_vector<Statement>(If{
203203
std::move(_switchStmt.debugData),
204204
std::make_unique<Expression>(FunctionCall{
205205
debugData,
206-
Identifier{debugData, YulName{m_dialect.builtin(*m_dialect.equalityFunction()).name}},
206+
Identifier{debugData, YulName{m_dialect.builtin(*m_dialect.equalityFunctionHandle()).name}},
207207
{std::move(*switchCase.value), std::move(*_switchStmt.expression)}
208208
}),
209209
std::move(switchCase.body)
210210
});
211211
}
212212
else
213213
{
214-
if (!m_dialect.discardFunction())
214+
if (!m_dialect.discardFunctionHandle())
215215
return {};
216216

217217
return make_vector<Statement>(
218218
makeDiscardCall(
219219
debugData,
220-
m_dialect.builtin(*m_dialect.discardFunction()),
220+
m_dialect.builtin(*m_dialect.discardFunctionHandle()),
221221
std::move(*_switchStmt.expression)
222222
),
223223
std::move(switchCase.body)

libyul/optimiser/DataFlowAnalyzer.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -54,13 +54,13 @@ DataFlowAnalyzer::DataFlowAnalyzer(
5454
{
5555
if (m_analyzeStores)
5656
{
57-
if (auto const& builtinHandle = _dialect.memoryStoreFunction())
57+
if (auto const& builtinHandle = _dialect.memoryStoreFunctionHandle())
5858
m_storeFunctionName[static_cast<unsigned>(StoreLoadLocation::Memory)] = YulName{_dialect.builtin(*builtinHandle).name};
59-
if (auto const& builtinHandle = _dialect.memoryLoadFunction())
59+
if (auto const& builtinHandle = _dialect.memoryLoadFunctionHandle())
6060
m_loadFunctionName[static_cast<unsigned>(StoreLoadLocation::Memory)] = YulName{_dialect.builtin(*builtinHandle).name};
61-
if (auto const& builtinHandle = _dialect.storageStoreFunction())
61+
if (auto const& builtinHandle = _dialect.storageStoreFunctionHandle())
6262
m_storeFunctionName[static_cast<unsigned>(StoreLoadLocation::Storage)] = YulName{_dialect.builtin(*builtinHandle).name};
63-
if (auto const& builtinHandle = _dialect.storageLoadFunction())
63+
if (auto const& builtinHandle = _dialect.storageLoadFunctionHandle())
6464
m_loadFunctionName[static_cast<unsigned>(StoreLoadLocation::Storage)] = YulName{_dialect.builtin(*builtinHandle).name};
6565
}
6666
}
@@ -446,7 +446,7 @@ std::optional<YulName> DataFlowAnalyzer::isSimpleLoad(
446446
std::optional<std::pair<YulName, YulName>> DataFlowAnalyzer::isKeccak(Expression const& _expression) const
447447
{
448448
if (FunctionCall const* funCall = std::get_if<FunctionCall>(&_expression))
449-
if (funCall->functionName.name.str() == m_dialect.builtin(*m_dialect.hashFunction()).name)
449+
if (funCall->functionName.name.str() == m_dialect.builtin(*m_dialect.hashFunctionHandle()).name)
450450
if (Identifier const* start = std::get_if<Identifier>(&funCall->arguments.at(0)))
451451
if (Identifier const* length = std::get_if<Identifier>(&funCall->arguments.at(1)))
452452
return std::make_pair(start->name, length->name);

libyul/optimiser/ForLoopConditionIntoBody.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ void ForLoopConditionIntoBody::run(OptimiserStepContext& _context, Block& _ast)
3333
void ForLoopConditionIntoBody::operator()(ForLoop& _forLoop)
3434
{
3535
if (
36-
m_dialect.booleanNegationFunction() &&
36+
m_dialect.booleanNegationFunctionHandle() &&
3737
!std::holds_alternative<Literal>(*_forLoop.condition) &&
3838
!std::holds_alternative<Identifier>(*_forLoop.condition)
3939
)
@@ -47,7 +47,7 @@ void ForLoopConditionIntoBody::operator()(ForLoop& _forLoop)
4747
std::make_unique<Expression>(
4848
FunctionCall {
4949
debugData,
50-
{debugData, YulName{m_dialect.builtin(*m_dialect.booleanNegationFunction()).name}},
50+
{debugData, YulName{m_dialect.builtin(*m_dialect.booleanNegationFunctionHandle()).name}},
5151
util::make_vector<Expression>(std::move(*_forLoop.condition))
5252
}
5353
),

libyul/optimiser/LoadResolver.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ void LoadResolver::visit(Expression& _e)
6262
tryResolve(_e, StoreLoadLocation::Memory, funCall->arguments);
6363
else if (funCall->functionName.name == m_loadFunctionName[static_cast<unsigned>(StoreLoadLocation::Storage)])
6464
tryResolve(_e, StoreLoadLocation::Storage, funCall->arguments);
65-
else if (!m_containsMSize && funCall->functionName.name.str() == m_dialect.builtin(*m_dialect.hashFunction()).name)
65+
else if (!m_containsMSize && funCall->functionName.name.str() == m_dialect.builtin(*m_dialect.hashFunctionHandle()).name)
6666
{
6767
Identifier const* start = std::get_if<Identifier>(&funCall->arguments.at(0));
6868
Identifier const* length = std::get_if<Identifier>(&funCall->arguments.at(1));

libyul/optimiser/Metrics.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ namespace solidity::yul
2828
{
2929

3030
struct Dialect;
31-
struct EVMDialect;
31+
class EVMDialect;
3232

3333
/**
3434
* Weights to be assigned to specific yul statements and expressions by a metric.

0 commit comments

Comments
 (0)