aboutsummaryrefslogtreecommitdiffstats
path: root/CallGraph.h
diff options
context:
space:
mode:
authorChristian <c@ethdev.com>2014-12-16 05:57:39 +0800
committerChristian <c@ethdev.com>2014-12-17 06:49:45 +0800
commitb2e3771598c985afac1aa76b32e67ad2744f7cf1 (patch)
treef12c59f9bcfb85605c6f5cf1f9c348d0c545e174 /CallGraph.h
parent5b802b685e794832bf8834183bf6c9604e513bbf (diff)
downloaddexon-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.h53
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;
+};
+
+}
+}