summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2015-06-25 13:32:57 +0300
committerAndrei Karas <akaras@inbox.ru>2015-06-25 14:25:52 +0300
commit06b55fde7a240a86cab66d9c0b756aac9b00f96a (patch)
tree620f725dd34b78398ce4df7ec4ad368d2706357d /src
parent6df4368beeb6fc37aeeff5b0698ce75053cb05ea (diff)
downloadparanucker-06b55fde7a240a86cab66d9c0b756aac9b00f96a.tar.gz
paranucker-06b55fde7a240a86cab66d9c0b756aac9b00f96a.tar.bz2
paranucker-06b55fde7a240a86cab66d9c0b756aac9b00f96a.tar.xz
paranucker-06b55fde7a240a86cab66d9c0b756aac9b00f96a.zip
Add into analysis node INIT_EXPR.
Diffstat (limited to 'src')
-rw-r--r--src/analysis/analysis.cpp4
-rw-r--r--src/analysis/expression.cpp16
-rw-r--r--src/analysis/expression.h3
3 files changed, 23 insertions, 0 deletions
diff --git a/src/analysis/analysis.cpp b/src/analysis/analysis.cpp
index f0dc245..2be2381 100644
--- a/src/analysis/analysis.cpp
+++ b/src/analysis/analysis.cpp
@@ -40,6 +40,7 @@
#include "nodes/expr/cond_expr.h"
#include "nodes/expr/decl_expr.h"
#include "nodes/expr/eq_expr.h"
+#include "nodes/expr/init_expr.h"
#include "nodes/expr/modify_expr.h"
#include "nodes/expr/ne_expr.h"
#include "nodes/expr/nonlvalue_expr.h"
@@ -359,6 +360,9 @@ void analyseNode(Node *node, const WalkItem &wi, WalkItem &wo)
case DECL_EXPR:
analyseDeclExpr(static_cast<DeclExprNode*>(node), wi2, wo);
break;
+ case INIT_EXPR:
+ analyseInitExpr(static_cast<InitExprNode*>(node), wi2, wo);
+ break;
case MODIFY_EXPR:
analyseModifyExpr(static_cast<ModifyExprNode*>(node), wi2, wo);
break;
diff --git a/src/analysis/expression.cpp b/src/analysis/expression.cpp
index 959cc79..fbad407 100644
--- a/src/analysis/expression.cpp
+++ b/src/analysis/expression.cpp
@@ -34,6 +34,7 @@
#include "nodes/expr/cond_expr.h"
#include "nodes/expr/decl_expr.h"
#include "nodes/expr/eq_expr.h"
+#include "nodes/expr/init_expr.h"
#include "nodes/expr/modify_expr.h"
#include "nodes/expr/ne_expr.h"
#include "nodes/expr/nonlvalue_expr.h"
@@ -515,4 +516,19 @@ void analyseCleanupPointExpr(CleanupPointExprNode* node, const WalkItem &wi, Wal
wo.stopWalking = true;
}
+void analyseInitExpr(InitExprNode* node, const WalkItem &wi, WalkItem &wo)
+{
+ // need one arg for check
+ if (node->args.size() < 2 || command == FindArgs)
+ return;
+
+ // var1 = var2
+ std::string var1 = getVariableName(node->args[0]);
+ std::string var2 = getVariableName(node->args[1]);
+ if (var1.empty() || var2.empty())
+ return;
+ wo.addNullVars.insert(var1);
+ addLinkedVar(wo, var2, var1);
+}
+
}
diff --git a/src/analysis/expression.h b/src/analysis/expression.h
index 825f73a..2a23256 100644
--- a/src/analysis/expression.h
+++ b/src/analysis/expression.h
@@ -30,6 +30,7 @@ struct CompoundExprNode;
struct CondExprNode;
struct DeclExprNode;
struct EqExprNode;
+struct InitExprNode;
struct ModifyExprNode;
struct NeExprNode;
struct Node;
@@ -81,6 +82,8 @@ namespace Analysis
void analyseNonLvalueExpr(NonLvalueExprNode *node, const WalkItem &wi, WalkItem &wo);
+ void analyseInitExpr(InitExprNode* node, const WalkItem &wi, WalkItem &wo);
+
std::string getComponentRefVariable(Node *node);
}