summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2015-06-19 19:59:18 +0300
committerAndrei Karas <akaras@inbox.ru>2015-06-19 19:59:18 +0300
commitd2dfe9e0e00f08824f8b925d115053693aa1241f (patch)
tree8f732a2df3849141d925cace1d1ef642a1347aa0
parent748dc1dfbad72879c22f4b04c2f94a302f3875ec (diff)
downloadparanucker-d2dfe9e0e00f08824f8b925d115053693aa1241f.tar.gz
paranucker-d2dfe9e0e00f08824f8b925d115053693aa1241f.tar.bz2
paranucker-d2dfe9e0e00f08824f8b925d115053693aa1241f.tar.xz
paranucker-d2dfe9e0e00f08824f8b925d115053693aa1241f.zip
Fix some "if (expr && expr)" and "if (expr || expr)" issues.
-rw-r--r--src/analysis/expression.cpp58
-rw-r--r--src/analysis/statement.cpp2
-rw-r--r--src/logger.cpp1
3 files changed, 25 insertions, 36 deletions
diff --git a/src/analysis/expression.cpp b/src/analysis/expression.cpp
index f852f9f..66e32ce 100644
--- a/src/analysis/expression.cpp
+++ b/src/analysis/expression.cpp
@@ -87,7 +87,7 @@ void analyseNeExpr(NeExprNode *node, const WalkItem &wi, WalkItem &wo)
if (node->args.size() < 2 || command == FindArgs)
return;
- //Log::dumpWI(node, "NE in ", wo);
+// Log::dumpWI(node, "NE in ", wo);
// PARM_DECL?
Node *node1 = skipNop(node->args[0]);
// INTEGER_CST?
@@ -110,7 +110,7 @@ void analyseNeExpr(NeExprNode *node, const WalkItem &wi, WalkItem &wo)
wo.cleanExpr = false;
wo.uselessExpr = true;
}
- //Log::dumpWI(node, "NE out ", wo);
+ Log::dumpWI(node, "NE out ", wo);
}
void analyseEqExpr(EqExprNode *node, const WalkItem &wi, WalkItem &wo)
@@ -119,7 +119,7 @@ void analyseEqExpr(EqExprNode *node, const WalkItem &wi, WalkItem &wo)
if (node->args.size() < 2 || command == FindArgs)
return;
- //Log::dumpWI(node, "EQ in ", wo);
+ Log::dumpWI(node, "EQ in ", wo);
// PARM_DECL?
Node *node1 = skipNop(node->args[0]);
// INTEGER_CST?
@@ -141,7 +141,7 @@ void analyseEqExpr(EqExprNode *node, const WalkItem &wi, WalkItem &wo)
wo.cleanExpr = false;
wo.uselessExpr = true;
}
- //Log::dumpWI(node, "EQ out ", wo);
+ Log::dumpWI(node, "EQ out ", wo);
}
void analyseTruthOrIfExpr(TruthOrIfExprNode *node, const WalkItem &wi, WalkItem &wo)
@@ -150,30 +150,26 @@ void analyseTruthOrIfExpr(TruthOrIfExprNode *node, const WalkItem &wi, WalkItem
if (node->args.size() < 2 || command == FindArgs)
return;
- //Log::dumpWI(node, "wo in ", wo);
+ Log::dumpWI(node, "wo in ", wo);
WalkItem wo1 = wo;
WalkItem wo2 = wo;
walkTree(node->args[0], wi, wo1);
walkTree(node->args[1], wi, wo2);
- //Log::dumpWI(node, "wo1 ", wo1);
- //Log::dumpWI(node, "wo2 ", wo2);
+ Log::dumpWI(node, "wo1 ", wo1);
+ Log::dumpWI(node, "wo2 ", wo2);
+ // probably condition wrong
if (wo1.cleanExpr)
- {
mergeNullChecked(wo, wo1);
- //mergeNonNullChecked(wo, wo1);
- }
+ // probably condition wrong
if (wo2.cleanExpr)
- {
mergeNullChecked(wo, wo2);
- //mergeNonNullChecked(wo, wo2);
- }
// need check for cleanExpr?
intersectNonNullChecked(wo, wo1, wo2);
- wo.cleanExpr = false;
+ wo.cleanExpr = true;
wo.stopWalking = true;
- wo.uselessExpr = wo1.uselessExpr || wo2.uselessExpr;
- //Log::dumpWI(node, "wo out ", wo);
+ wo.uselessExpr = false;
+ Log::dumpWI(node, "wo out ", wo);
}
void analyseTruthAndIfExpr(TruthAndIfExprNode *node, const WalkItem &wi, WalkItem &wo)
@@ -182,33 +178,25 @@ void analyseTruthAndIfExpr(TruthAndIfExprNode *node, const WalkItem &wi, WalkIte
if (node->args.size() < 2 || command == FindArgs)
return;
- //Log::dumpWI(node, "wo in ", wo);
+ Log::dumpWI(node, "wo in ", wo);
WalkItem wo1 = wo;
+ WalkItem wo2 = wo;
walkTree(node->args[0], wi, wo1);
- WalkItem wo2 = wo1;
- walkTree(node->args[1], wo1, wo2);
- //Log::dumpWI(node, "wo1 ", wo1);
- //Log::dumpWI(node, "wo2 ", wo2);
+ walkTree(node->args[1], wi, wo2);
+ Log::dumpWI(node, "wo1 ", wo1);
+ Log::dumpWI(node, "wo2 ", wo2);
wo.stopWalking = true;
+ // probably condition wrong
if (!wo1.uselessExpr && !wo2.uselessExpr)
{ // need combine wo1 and wo2
- // for now empty simple merge, but must be compilated!
- if (wo1.checkedNullVars == wo2.checkedNullVars)
- {
- wo.checkedNullVars.insert(wo2.checkedNullVars.begin(),
- wo2.checkedNullVars.end());
- }
- if (wo1.checkedNonNullVars == wo2.checkedNonNullVars)
- {
- wo.checkedNonNullVars.insert(wo2.checkedNonNullVars.begin(),
- wo2.checkedNonNullVars.end());
- }
- //intersectChecked(wo, wo1, wo2);
+ intersectNullChecked(wo, wo1, wo2);
+ mergeNonNullChecked(wo, wo1);
+ mergeNonNullChecked(wo, wo2);
}
- wo.cleanExpr = false;
+ wo.cleanExpr = wo1.cleanExpr && wo2.cleanExpr;
wo.uselessExpr = wo1.uselessExpr || wo2.uselessExpr;
- //Log::dumpWI(node, "wo out ", wo);
+ Log::dumpWI(node, "wo out ", wo);
}
}
diff --git a/src/analysis/statement.cpp b/src/analysis/statement.cpp
index d11c57b..f83d849 100644
--- a/src/analysis/statement.cpp
+++ b/src/analysis/statement.cpp
@@ -52,7 +52,7 @@ void analyseIfStmt(IfStmtNode *node, const WalkItem &wi, WalkItem &wo)
WalkItem wci = wi;
WalkItem wco = wo;
walkTree(condNode, wci, wco);
- //Log::dumpWI(node, "wco ", wco);
+ Log::dumpWI(node, "wco ", wco);
WalkItem wi2 = wi;
FOR_EACH (std::set<std::string>::const_iterator,
diff --git a/src/logger.cpp b/src/logger.cpp
index 6e78829..0116a36 100644
--- a/src/logger.cpp
+++ b/src/logger.cpp
@@ -196,6 +196,7 @@ void dumpWI(Node *const node,
const std::string &name,
WalkItem &wi)
{
+ return;
Log::log("%s%s %s",
name.c_str(),
node->nodeTypeName.c_str(),