diff options
author | Andrei Karas <akaras@inbox.ru> | 2015-06-09 14:26:43 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2015-06-09 14:26:43 +0300 |
commit | 8832c4b4f96d553b0cf6374548cb493655fe662c (patch) | |
tree | 6d839d7a95723127aa7f6b6da9e973618c089b12 /src/analysis/analysis.cpp | |
parent | b7d171da34d5339c1c83fb5a95efc80881e374b2 (diff) | |
download | paranucker-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.cpp | 19 |
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; } } |