summaryrefslogtreecommitdiff
path: root/src/analysis/analysis.cpp
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2015-06-09 14:26:43 +0300
committerAndrei Karas <akaras@inbox.ru>2015-06-09 14:26:43 +0300
commit8832c4b4f96d553b0cf6374548cb493655fe662c (patch)
tree6d839d7a95723127aa7f6b6da9e973618c089b12 /src/analysis/analysis.cpp
parentb7d171da34d5339c1c83fb5a95efc80881e374b2 (diff)
downloadparanucker-8832c4b4f96d553b0cf6374548cb493655fe662c.tar.gz
paranucker-8832c4b4f96d553b0cf6374548cb493655fe662c.tar.bz2
paranucker-8832c4b4f96d553b0cf6374548cb493655fe662c.tar.xz
paranucker-8832c4b4f96d553b0cf6374548cb493655fe662c.zip
Add basic walking tree parameters.
Diffstat (limited to 'src/analysis/analysis.cpp')
-rw-r--r--src/analysis/analysis.cpp19
1 files changed, 14 insertions, 5 deletions
diff --git a/src/analysis/analysis.cpp b/src/analysis/analysis.cpp
index fa1672c..3221ccf 100644
--- a/src/analysis/analysis.cpp
+++ b/src/analysis/analysis.cpp
@@ -22,6 +22,7 @@
#include "command.h"
#include "analysis/function.h"
+#include "analysis/walkitem.h"
#include "nodes/decl/function_decl.h"
@@ -30,23 +31,31 @@
namespace Analysis
{
-void walkTree(Node *node)
+void startWalkTree(Node *node)
{
- analyseNode(node);
+ walkTree(node, WalkItem());
+}
+
+void walkTree(Node *node, WalkItem wi)
+{
+ wi = analyseNode(node, wi);
+ if (wi.stopWalking)
+ return;
FOR_EACH (std::vector<Node*>::iterator, it, node->childs)
{
- walkTree(*it);
+ walkTree(*it, wi);
}
}
-void analyseNode(Node *node)
+WalkItem analyseNode(Node *node, WalkItem wi)
{
// searching function declaration
if (node->nodeType == FUNCTION_DECL)
{
- analyseFunction(static_cast<FunctionDeclNode*>(node));
+ return analyseFunction(static_cast<FunctionDeclNode*>(node), wi);
}
+ return wi;
}
}