diff options
author | Christian <c@ethdev.com> | 2014-12-16 05:57:39 +0800 |
---|---|---|
committer | Christian <c@ethdev.com> | 2014-12-17 06:49:45 +0800 |
commit | b2e3771598c985afac1aa76b32e67ad2744f7cf1 (patch) | |
tree | f12c59f9bcfb85605c6f5cf1f9c348d0c545e174 /CallGraph.h | |
parent | 5b802b685e794832bf8834183bf6c9604e513bbf (diff) | |
download | dexon-solidity-b2e3771598c985afac1aa76b32e67ad2744f7cf1.tar.gz dexon-solidity-b2e3771598c985afac1aa76b32e67ad2744f7cf1.tar.zst dexon-solidity-b2e3771598c985afac1aa76b32e67ad2744f7cf1.zip |
Add functions needed by constructor.
Diffstat (limited to 'CallGraph.h')
-rw-r--r-- | CallGraph.h | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/CallGraph.h b/CallGraph.h new file mode 100644 index 00000000..986e4dc4 --- /dev/null +++ b/CallGraph.h @@ -0,0 +1,53 @@ +/* + This file is part of cpp-ethereum. + + cpp-ethereum is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + cpp-ethereum is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with cpp-ethereum. If not, see <http://www.gnu.org/licenses/>. +*/ +/** + * @author Christian <c@ethdev.com> + * @date 2014 + * Callgraph of functions inside a contract. + */ + +#include <set> +#include <queue> +#include <boost/range/iterator_range.hpp> +#include <libsolidity/ASTVisitor.h> + +namespace dev { +namespace solidity { + +/** + * Can be used to compute the graph of calls (or rather references) between functions of the same + * contract. Current functionality is limited to computing all functions that are directly + * or indirectly called by some functions. + */ +class CallGraph: private ASTConstVisitor +{ +public: + void addFunction(FunctionDefinition const& _function); + void computeCallGraph(); + + std::set<FunctionDefinition const*> const& getCalls(); + +private: + void addFunctionToQueue(FunctionDefinition const& _function); + virtual bool visit(Identifier const& _identifier) override; + + std::set<FunctionDefinition const*> m_functionsSeen; + std::queue<FunctionDefinition const*> m_workQueue; +}; + +} +} |