summaryrefslogtreecommitdiff
path: root/src/analysis/expression.cpp
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2015-06-23 16:55:55 +0300
committerAndrei Karas <akaras@inbox.ru>2015-06-23 16:55:55 +0300
commitf426fd33e3113838a7aa152608959b3cbbb531c3 (patch)
treebadf5908c4516d57c0e16a58764f884945d79673 /src/analysis/expression.cpp
parent5b246024eb964756df6e8bc6ae527f259643c38f (diff)
downloadparanucker-f426fd33e3113838a7aa152608959b3cbbb531c3.tar.gz
paranucker-f426fd33e3113838a7aa152608959b3cbbb531c3.tar.bz2
paranucker-f426fd33e3113838a7aa152608959b3cbbb531c3.tar.xz
paranucker-f426fd33e3113838a7aa152608959b3cbbb531c3.zip
Move TRUTH_ORIF_EXPR analysis into shared function.
Diffstat (limited to 'src/analysis/expression.cpp')
-rw-r--r--src/analysis/expression.cpp19
1 files changed, 12 insertions, 7 deletions
diff --git a/src/analysis/expression.cpp b/src/analysis/expression.cpp
index a9fb275..6ee975c 100644
--- a/src/analysis/expression.cpp
+++ b/src/analysis/expression.cpp
@@ -152,23 +152,19 @@ void analyseEqExpr(EqExprNode *node, const WalkItem &wi, WalkItem &wo)
Log::dumpWI(node, "EQ out ", wo);
}
-void analyseTruthOrIfExpr(TruthOrIfExprNode *node, const WalkItem &wi, WalkItem &wo)
+void analyseOrCondition(Node *node, Node *node1, Node *node2, const WalkItem &wi, WalkItem &wo)
{
- // need two args for check
- if (node->args.size() < 2 || command == FindArgs)
- return;
-
Log::dumpWI(node, "wo in ", wo);
WalkItem wo1 = wo;
WalkItem wo2 = wo;
- walkTree(node->args[0], wi, wo1);
+ walkTree(node1, wi, wo1);
Log::dumpWI(node, "wo1 ", wo1);
WalkItem wi2 = wi;
removeCheckNullVarsSet(wi2, wo1.checkedNullVars);
wi2.checkNullVars.insert(wo1.checkedNonNullVars.begin(),
wo1.checkedNonNullVars.end());
Log::dumpWI(node, "wi2 ", wi2);
- walkTree(node->args[1], wi2, wo2);
+ walkTree(node2, wi2, wo2);
Log::dumpWI(node, "wo2 ", wo2);
// probably condition wrong
if (wo1.cleanExpr)
@@ -219,6 +215,15 @@ void analyseAndCondition(Node *node, Node *node1, Node *node2, const WalkItem &w
Log::dumpWI(node, "wo out ", wo);
}
+void analyseTruthOrIfExpr(TruthOrIfExprNode *node, const WalkItem &wi, WalkItem &wo)
+{
+ // need two args for check
+ if (node->args.size() < 2 || command == FindArgs)
+ return;
+
+ analyseOrCondition(node, node->args[0], node->args[1], wi, wo);
+}
+
void analyseTruthAndIfExpr(TruthAndIfExprNode *node, const WalkItem &wi, WalkItem &wo)
{
// need two args for check