diff options
author | chriseth <chris@ethereum.org> | 2017-12-20 21:12:52 +0800 |
---|---|---|
committer | chriseth <chris@ethereum.org> | 2018-01-13 00:21:52 +0800 |
commit | 937b95cbe5bcef6c1324c380f37629e5a2a5811a (patch) | |
tree | d47456481248f24a90dfa1ae69097fe5f80ec53e /libjulia/optimiser/ASTWalker.h | |
parent | 0c20b6da6b6c5f8fa72c389648b5da54c13945f9 (diff) | |
download | dexon-solidity-937b95cbe5bcef6c1324c380f37629e5a2a5811a.tar dexon-solidity-937b95cbe5bcef6c1324c380f37629e5a2a5811a.tar.gz dexon-solidity-937b95cbe5bcef6c1324c380f37629e5a2a5811a.tar.bz2 dexon-solidity-937b95cbe5bcef6c1324c380f37629e5a2a5811a.tar.lz dexon-solidity-937b95cbe5bcef6c1324c380f37629e5a2a5811a.tar.xz dexon-solidity-937b95cbe5bcef6c1324c380f37629e5a2a5811a.tar.zst dexon-solidity-937b95cbe5bcef6c1324c380f37629e5a2a5811a.zip |
Use explicit visit function for the walker.
Diffstat (limited to 'libjulia/optimiser/ASTWalker.h')
-rw-r--r-- | libjulia/optimiser/ASTWalker.h | 26 |
1 files changed, 18 insertions, 8 deletions
diff --git a/libjulia/optimiser/ASTWalker.h b/libjulia/optimiser/ASTWalker.h index 4652a353..dbf8194b 100644 --- a/libjulia/optimiser/ASTWalker.h +++ b/libjulia/optimiser/ASTWalker.h @@ -58,12 +58,21 @@ public: virtual void operator()(ForLoop const&); virtual void operator()(Block const& _block); + virtual void visit(Statement const& _st) + { + boost::apply_visitor(*this, _st); + } + virtual void visit(Expression const& _e) + { + boost::apply_visitor(*this, _e); + } + protected: template <class T> void walkVector(T const& _statements) { for (auto const& st: _statements) - boost::apply_visitor(*this, st); + visit(st); } }; @@ -89,13 +98,6 @@ public: virtual void operator()(ForLoop&); virtual void operator()(Block& _block); -protected: - template <class T> - void walkVector(T&& _statements) - { - for (auto& st: _statements) - visit(st); - } virtual void visit(Statement& _st) { boost::apply_visitor(*this, _st); @@ -104,6 +106,14 @@ protected: { boost::apply_visitor(*this, _e); } + +protected: + template <class T> + void walkVector(T&& _statements) + { + for (auto& st: _statements) + visit(st); + } }; } |