summaryrefslogtreecommitdiff
path: root/src/analysis/analysis.cpp
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2015-06-22 18:54:45 +0300
committerAndrei Karas <akaras@inbox.ru>2015-06-22 18:54:45 +0300
commitdc882ac20b776eaa206f74573eca994be013941c (patch)
treec8819c37cca75020792d3107fec1774fb1e504bc /src/analysis/analysis.cpp
parentcea1bf35ade4362d0a9e46980b1fdba44764ff61 (diff)
downloadparanucker-dc882ac20b776eaa206f74573eca994be013941c.tar.gz
paranucker-dc882ac20b776eaa206f74573eca994be013941c.tar.bz2
paranucker-dc882ac20b776eaa206f74573eca994be013941c.tar.xz
paranucker-dc882ac20b776eaa206f74573eca994be013941c.zip
Fix issue in related variables checks.
Diffstat (limited to 'src/analysis/analysis.cpp')
-rw-r--r--src/analysis/analysis.cpp8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/analysis/analysis.cpp b/src/analysis/analysis.cpp
index 5a47151..8e7c6bd 100644
--- a/src/analysis/analysis.cpp
+++ b/src/analysis/analysis.cpp
@@ -36,6 +36,7 @@
#include "nodes/expr/bind_expr.h"
#include "nodes/expr/compound_expr.h"
#include "nodes/expr/cond_expr.h"
+#include "nodes/expr/decl_expr.h"
#include "nodes/expr/eq_expr.h"
#include "nodes/expr/modify_expr.h"
#include "nodes/expr/ne_expr.h"
@@ -124,6 +125,8 @@ void walkTree(Node *node, const WalkItem &wi, WalkItem &wo)
addCheckNullVars(wo, wi2);
addCheckNullVars(wi2, wi2);
wi2.linkedVars = wo.linkedVars;
+ wi2.addNullVars = wo.addNullVars;
+ wi2.linkedVars = wo.linkedVars;
// Log::dumpAttr(node, 1, wo.isReturned);
const bool isReturned = wo.isReturned;
@@ -140,11 +143,13 @@ void walkTree(Node *node, const WalkItem &wi, WalkItem &wo)
wi2.removeNullVars = wo2.removeNullVars;
wi2.addNullVars = wo2.addNullVars;
wi2.isReturned = wi2.isReturned || wo2.isReturned;
+ wi2.linkedVars = wo2.linkedVars;
wo2.stopWalking = false;
}
wo.removeNullVars = wi2.removeNullVars;
wo.addNullVars = wi2.addNullVars;
wo.isReturned = wo.isReturned || isReturned || wo2.isReturned;
+ wo.linkedVars = wi2.linkedVars;
// Log::dumpAttr(node, 2, wo.isReturned);
}
@@ -293,6 +298,9 @@ void analyseNode(Node *node, const WalkItem &wi, WalkItem &wo)
case BIND_EXPR:
analyseBindExpr(static_cast<BindExprNode*>(node), wi2, wo);
break;
+ case DECL_EXPR:
+ analyseDeclExpr(static_cast<DeclExprNode*>(node), wi2, wo);
+ break;
case MODIFY_EXPR:
analyseModifyExpr(static_cast<ModifyExprNode*>(node), wi2, wo);
break;