summaryrefslogtreecommitdiff
path: root/src/analysis/analysis.cpp
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2015-06-10 18:22:44 +0300
committerAndrei Karas <akaras@inbox.ru>2015-06-10 18:22:44 +0300
commit4084e13c4060412d490807a45490cce3928abcde (patch)
treed5bbf57bffddb252994b5c618bca9636a1af5fee /src/analysis/analysis.cpp
parent315533a9b1245e542501fc2606d8fdebc2e2f44b (diff)
downloadparanucker-4084e13c4060412d490807a45490cce3928abcde.tar.gz
paranucker-4084e13c4060412d490807a45490cce3928abcde.tar.bz2
paranucker-4084e13c4060412d490807a45490cce3928abcde.tar.xz
paranucker-4084e13c4060412d490807a45490cce3928abcde.zip
Allow in walking from one node change searched variables in same node levels.
This fix bug in test6.
Diffstat (limited to 'src/analysis/analysis.cpp')
-rw-r--r--src/analysis/analysis.cpp14
1 files changed, 10 insertions, 4 deletions
diff --git a/src/analysis/analysis.cpp b/src/analysis/analysis.cpp
index 6e08867..a255158 100644
--- a/src/analysis/analysis.cpp
+++ b/src/analysis/analysis.cpp
@@ -47,20 +47,26 @@ void startWalkTree(Node *node)
walkTree(node, WalkItem());
}
-void walkTree(Node *node, WalkItem wi)
+WalkItem walkTree(Node *node, WalkItem wi)
{
if (!node)
- return;
+ return wi;
wi = analyseNode(node, wi);
if (wi.stopWalking)
- return;
+ {
+ wi.stopWalking = false;
+ return wi;
+ }
+ WalkItem wi2 = wi;
FOR_EACH (std::vector<Node*>::iterator, it, node->childs)
{
- walkTree(*it, wi);
+ wi2 = walkTree(*it, wi2);
+ wi2.stopWalking = false;
}
+ return wi;
}
int findBackLocation(Node *node)