diff options
author | Andrei Karas <akaras@inbox.ru> | 2015-06-10 18:22:44 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2015-06-10 18:22:44 +0300 |
commit | 4084e13c4060412d490807a45490cce3928abcde (patch) | |
tree | d5bbf57bffddb252994b5c618bca9636a1af5fee /src/analysis/analysis.cpp | |
parent | 315533a9b1245e542501fc2606d8fdebc2e2f44b (diff) | |
download | paranucker-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.cpp | 14 |
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) |