summaryrefslogtreecommitdiff
path: root/src/analysis/analysis.cpp
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2015-07-10 18:08:10 +0300
committerAndrei Karas <akaras@inbox.ru>2015-07-10 18:08:10 +0300
commit6259def98c7241f25233613298e87a1abab9e853 (patch)
tree851f55a405a9dbe9eb76288ba62d24c5002e323e /src/analysis/analysis.cpp
parent2c66820bd689662170447158ef5a8cf66f760e0d (diff)
downloadparanucker-6259def98c7241f25233613298e87a1abab9e853.tar.gz
paranucker-6259def98c7241f25233613298e87a1abab9e853.tar.bz2
paranucker-6259def98c7241f25233613298e87a1abab9e853.tar.xz
paranucker-6259def98c7241f25233613298e87a1abab9e853.zip
Add analysis for CONTINUE_STMT node.
Diffstat (limited to 'src/analysis/analysis.cpp')
-rw-r--r--src/analysis/analysis.cpp7
1 files changed, 7 insertions, 0 deletions
diff --git a/src/analysis/analysis.cpp b/src/analysis/analysis.cpp
index 70905e6..e35de85 100644
--- a/src/analysis/analysis.cpp
+++ b/src/analysis/analysis.cpp
@@ -55,6 +55,7 @@
#include "nodes/ref/component_ref.h"
+#include "nodes/stmt/continue_stmt.h"
#include "nodes/stmt/if_stmt.h"
#include "nodes/stmt/while_stmt.h"
@@ -98,6 +99,7 @@ void walkTree(Node *node, const WalkItem &wi, WalkItem &wo)
removeNeedCheckNullVarsSet(wi2, wi2.removeNullVars);
const bool isReturned = wo.isReturned;
+ const bool isContinued = wo.isContinued;
WalkItem wo2 = wo;
if (command != Command::DumpNullPointers)
@@ -117,6 +119,7 @@ void walkTree(Node *node, const WalkItem &wi, WalkItem &wo)
wi2.knownNullVars = wo2.knownNullVars;
wi2.knownNonNullVars = wo2.knownNonNullVars;
wi2.isReturned = wi2.isReturned || wo2.isReturned;
+ wi2.isContinued = wi2.isContinued || wo2.isContinued;
wi2.linkedVars = wo2.linkedVars;
wi2.linkedReverseVars = wo2.linkedReverseVars;
wo2.stopWalking = false;
@@ -126,6 +129,7 @@ void walkTree(Node *node, const WalkItem &wi, WalkItem &wo)
wo.removeNullVars = wi2.removeNullVars;
wo.addNullVars = wi2.addNullVars;
wo.isReturned = wo.isReturned || isReturned || wo2.isReturned;
+ wo.isContinued = wo.isContinued || isContinued || wo2.isContinued;
wo.linkedVars = wi2.linkedVars;
wo.linkedReverseVars = wi2.linkedReverseVars;
wo.knownVars = wo2.knownVars;
@@ -280,6 +284,9 @@ void analyseNode(Node *node, const WalkItem &wi, WalkItem &wo)
case WHILE_STMT:
analyseWhileStmt(static_cast<WhileStmtNode*>(node), wi2, wo);
break;
+ case CONTINUE_STMT:
+ analyseContinueStmt(static_cast<ContinueStmtNode*>(node), wi2, wo);
+ break;
case COMPONENT_REF:
analyseComponentRef(static_cast<ComponentRefNode*>(node), wi2, wo);
break;