summaryrefslogtreecommitdiff
path: root/src/analysis/expression.cpp
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2015-06-18 12:22:21 +0300
committerAndrei Karas <akaras@inbox.ru>2015-06-18 12:22:21 +0300
commitd2b4c53238a9c455eb15d58526b7e5f43100f457 (patch)
treefd3d4fcf7342cd64778b08f668e68a65e61b0cc5 /src/analysis/expression.cpp
parentf414be9da2934e8601ee2d6e85500e5bbab5ceca (diff)
downloadparanucker-d2b4c53238a9c455eb15d58526b7e5f43100f457.tar.gz
paranucker-d2b4c53238a9c455eb15d58526b7e5f43100f457.tar.bz2
paranucker-d2b4c53238a9c455eb15d58526b7e5f43100f457.tar.xz
paranucker-d2b4c53238a9c455eb15d58526b7e5f43100f457.zip
Add basic analysis for nodes EQ_EXPR and TRUTH_ORIF_EXPR.
Diffstat (limited to 'src/analysis/expression.cpp')
-rw-r--r--src/analysis/expression.cpp32
1 files changed, 31 insertions, 1 deletions
diff --git a/src/analysis/expression.cpp b/src/analysis/expression.cpp
index 666d448..c057f88 100644
--- a/src/analysis/expression.cpp
+++ b/src/analysis/expression.cpp
@@ -26,10 +26,12 @@
#include "analysis/walkitem.h"
#include "nodes/expr/addr_expr.h"
+#include "nodes/expr/eq_expr.h"
#include "nodes/expr/modify_expr.h"
#include "nodes/expr/ne_expr.h"
#include "nodes/expr/pointerplus_expr.h"
#include "nodes/expr/return_expr.h"
+#include "nodes/expr/truthorif_expr.h"
#include "nodes/ref/indirect_ref.h"
@@ -80,7 +82,7 @@ void analyseReturnExpr(ReturnExprNode *node, const WalkItem &wi, WalkItem &wo)
void analyseNeExpr(NeExprNode *node, const WalkItem &wi, WalkItem &wo)
{
- // need atleast one arg for check
+ // need two args for check
if (node->args.size() < 2 || !wi.isExpr || command == FindArgs)
return;
@@ -102,4 +104,32 @@ void analyseNeExpr(NeExprNode *node, const WalkItem &wi, WalkItem &wo)
}
}
+void analyseEqExpr(EqExprNode *node, const WalkItem &wi, WalkItem &wo)
+{
+ // need two args for check
+ if (node->args.size() < 2 || !wi.isExpr || command == FindArgs)
+ return;
+
+/*
+ // PARM_DECL?
+ Node *node1 = skipNop(node->args[0]);
+ // INTEGER_CST?
+ Node *node2 = skipNop(node->args[1]);
+ // if (var == 0)
+ if (node1 &&
+ node2 &&
+ node1->nodeType == PARM_DECL &&
+ node2->nodeType == INTEGER_CST &&
+ wi.checkNullVars.find(node1->label) != wi.checkNullVars.end() &&
+ node2->label == "0")
+ {
+ }
+*/
+// do nothing for now
+}
+
+void analyseTruthOrIfExpr(TruthOrIfExprNode *node, const WalkItem &wi, WalkItem &wo)
+{
+}
+
}