diff options
author | Christian Parpart <christian@parpart.family> | 2018-10-26 19:38:53 +0800 |
---|---|---|
committer | Christian Parpart <christian@parpart.family> | 2018-10-26 19:53:37 +0800 |
commit | 1264290d574858c0438dd72dfc91b17d0b2049e8 (patch) | |
tree | 3c5fe1c947a3ad655d87badac78a36d9f2785c19 /libyul/optimiser/ExpressionJoiner.h | |
parent | 41375b5d79a77d392922f36f149d5bef269303e6 (diff) | |
download | dexon-solidity-1264290d574858c0438dd72dfc91b17d0b2049e8.tar dexon-solidity-1264290d574858c0438dd72dfc91b17d0b2049e8.tar.gz dexon-solidity-1264290d574858c0438dd72dfc91b17d0b2049e8.tar.bz2 dexon-solidity-1264290d574858c0438dd72dfc91b17d0b2049e8.tar.lz dexon-solidity-1264290d574858c0438dd72dfc91b17d0b2049e8.tar.xz dexon-solidity-1264290d574858c0438dd72dfc91b17d0b2049e8.tar.zst dexon-solidity-1264290d574858c0438dd72dfc91b17d0b2049e8.zip |
[Yul] ExpressionJoiner: code cleanup
* ensure public API is only containing `run(Block&)`, all the rest is private API / implementation details
* adding some comments to class data members to quicker understand their meaning
* eliminate unnecessary `operator()(If&)` as it's not changing default behaviour of `ASTModifier`
* simplify readability of `visit(Expression&)`'s impl, also moving assert's into "isLatestStatementVarDeclOf", as this one is already ensuring exactly that.
* ctor impl's use of ReferenceCounter use shortened.
* renamed and improved `isLatestStatementVarDeclOf` to better match its meaning (especially since it's only used once)
Diffstat (limited to 'libyul/optimiser/ExpressionJoiner.h')
-rw-r--r-- | libyul/optimiser/ExpressionJoiner.h | 26 |
1 files changed, 13 insertions, 13 deletions
diff --git a/libyul/optimiser/ExpressionJoiner.h b/libyul/optimiser/ExpressionJoiner.h index df18e58f..4f06cc0f 100644 --- a/libyul/optimiser/ExpressionJoiner.h +++ b/libyul/optimiser/ExpressionJoiner.h @@ -73,29 +73,29 @@ class NameCollector; class ExpressionJoiner: public ASTModifier { public: - virtual void operator()(FunctionalInstruction&) override; - virtual void operator()(FunctionCall&) override; - virtual void operator()(If&) override; - virtual void operator()(Switch&) override; - virtual void operator()(Block& _block) override; - - using ASTModifier::visit; - virtual void visit(Expression& _e) override; - static void run(Block& _ast); + private: explicit ExpressionJoiner(Block& _ast); + void operator()(Block& _block) override; + void operator()(FunctionalInstruction&) override; + void operator()(FunctionCall&) override; + + using ASTModifier::visit; + void visit(Expression& _e) override; + void handleArguments(std::vector<Expression>& _arguments); void decrementLatestStatementPointer(); void resetLatestStatementPointer(); Statement* latestStatement(); - bool isLatestStatementVarDeclOf(Identifier const& _identifier); + bool isLatestStatementVarDeclJoinable(Identifier const& _identifier); - Block* m_currentBlock = nullptr; - size_t m_latestStatementInBlock = 0; - std::map<std::string, size_t> m_references; +private: + Block* m_currentBlock = nullptr; ///< Pointer to currently block holding the visiting statement. + size_t m_latestStatementInBlock = 0; ///< Offset to m_currentBlock's statements of the last visited statement. + std::map<std::string, size_t> m_references; ///< Holds reference counts to all variable declarations in current block. }; } |