summaryrefslogtreecommitdiff
path: root/src/analysis/analysis.cpp
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2015-06-18 00:07:12 +0300
committerAndrei Karas <akaras@inbox.ru>2015-06-18 00:07:12 +0300
commitca7fb26da9b7c4d3d32ebd7739b937ccf591167b (patch)
treedf8c2899261734cf85c68cb4201cebadab633723 /src/analysis/analysis.cpp
parentada4bce8b0199d2f5c42a64f391ccab441ec6429 (diff)
downloadparanucker-ca7fb26da9b7c4d3d32ebd7739b937ccf591167b.tar.gz
paranucker-ca7fb26da9b7c4d3d32ebd7739b937ccf591167b.tar.bz2
paranucker-ca7fb26da9b7c4d3d32ebd7739b937ccf591167b.tar.xz
paranucker-ca7fb26da9b7c4d3d32ebd7739b937ccf591167b.zip
Add support for checking is return present inside if statement.
Diffstat (limited to 'src/analysis/analysis.cpp')
-rw-r--r--src/analysis/analysis.cpp6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/analysis/analysis.cpp b/src/analysis/analysis.cpp
index d4d0917..9a890dd 100644
--- a/src/analysis/analysis.cpp
+++ b/src/analysis/analysis.cpp
@@ -75,7 +75,9 @@ void walkTree(Node *node, const WalkItem &wi, WalkItem &wo)
WalkItem wi2 = wi;
analyseNode(node, wi2, wo);
removeCheckNullVars(wi2);
+// Log::dumpAttr(node, 1, wo.isReturned);
+ const bool isReturned = wo.isReturned;
if (wo.stopWalking)
{
wo.stopWalking = false;
@@ -87,9 +89,13 @@ void walkTree(Node *node, const WalkItem &wi, WalkItem &wo)
{
walkTree(*it, wi2, wo2);
wi2.removeNullVars = wo2.removeNullVars;
+ wi2.isReturned = wi2.isReturned || wo2.isReturned;
wo2.stopWalking = false;
}
wo.removeNullVars = wi2.removeNullVars;
+ wo.isReturned = wo.isReturned || isReturned || wo2.isReturned;
+
+// Log::dumpAttr(node, 2, wo.isReturned);
}
int findBackLocation(Node *node)