diff options
author | Andrei Karas <akaras@inbox.ru> | 2015-06-23 16:55:55 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2015-06-23 16:55:55 +0300 |
commit | f426fd33e3113838a7aa152608959b3cbbb531c3 (patch) | |
tree | badf5908c4516d57c0e16a58764f884945d79673 /src/analysis/expression.cpp | |
parent | 5b246024eb964756df6e8bc6ae527f259643c38f (diff) | |
download | paranucker-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.cpp | 19 |
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 |