diff options
author | Andrei Karas <akaras@inbox.ru> | 2015-06-23 17:03:57 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2015-06-23 17:03:57 +0300 |
commit | fc19686699db0db4c36d6df360202518c2f0386a (patch) | |
tree | bf17f80e5e1159fcd7bd438e07319459366cc5e1 /src | |
parent | f426fd33e3113838a7aa152608959b3cbbb531c3 (diff) | |
download | paranucker-fc19686699db0db4c36d6df360202518c2f0386a.tar.gz paranucker-fc19686699db0db4c36d6df360202518c2f0386a.tar.bz2 paranucker-fc19686699db0db4c36d6df360202518c2f0386a.tar.xz paranucker-fc19686699db0db4c36d6df360202518c2f0386a.zip |
Add analysis for node TRUTH_AND_EXPR.
Diffstat (limited to 'src')
-rw-r--r-- | src/analysis/analysis.cpp | 4 | ||||
-rw-r--r-- | src/analysis/expression.cpp | 10 | ||||
-rw-r--r-- | src/analysis/expression.h | 3 |
3 files changed, 17 insertions, 0 deletions
diff --git a/src/analysis/analysis.cpp b/src/analysis/analysis.cpp index 17ed438..672b3b3 100644 --- a/src/analysis/analysis.cpp +++ b/src/analysis/analysis.cpp @@ -43,6 +43,7 @@ #include "nodes/expr/nop_expr.h" #include "nodes/expr/pointerplus_expr.h" #include "nodes/expr/return_expr.h" +#include "nodes/expr/truthand_expr.h" #include "nodes/expr/truthandif_expr.h" #include "nodes/expr/truthorif_expr.h" @@ -335,6 +336,9 @@ void analyseNode(Node *node, const WalkItem &wi, WalkItem &wo) case TRUTH_ANDIF_EXPR: analyseTruthAndIfExpr(static_cast<TruthAndIfExprNode*>(node), wi2, wo); break; + case TRUTH_AND_EXPR: + analyseTruthAndExpr(static_cast<TruthAndExprNode*>(node), wi2, wo); + break; case RETURN_EXPR: analyseReturnExpr(static_cast<ReturnExprNode*>(node), wi2, wo); break; diff --git a/src/analysis/expression.cpp b/src/analysis/expression.cpp index 6ee975c..60b4a3e 100644 --- a/src/analysis/expression.cpp +++ b/src/analysis/expression.cpp @@ -37,6 +37,7 @@ #include "nodes/expr/nop_expr.h" #include "nodes/expr/pointerplus_expr.h" #include "nodes/expr/return_expr.h" +#include "nodes/expr/truthand_expr.h" #include "nodes/expr/truthandif_expr.h" #include "nodes/expr/truthorif_expr.h" @@ -233,6 +234,15 @@ void analyseTruthAndIfExpr(TruthAndIfExprNode *node, const WalkItem &wi, WalkIte analyseAndCondition(node, node->args[0], node->args[1], wi, wo); } +void analyseTruthAndExpr(TruthAndExprNode *node, const WalkItem &wi, WalkItem &wo) +{ + // need two args for check + if (node->args.size() < 2 || command == FindArgs) + return; + + analyseAndCondition(node, node->args[0], node->args[1], wi, wo); +} + // args[0] condition // args[1] true expr // args[2] false expr diff --git a/src/analysis/expression.h b/src/analysis/expression.h index c69c201..71d23a5 100644 --- a/src/analysis/expression.h +++ b/src/analysis/expression.h @@ -33,6 +33,7 @@ struct NeExprNode; struct NopExprNode; struct PointerPlusExprNode; struct ReturnExprNode; +struct TruthAndExprNode; struct TruthAndIfExprNode; struct TruthOrIfExprNode; struct WalkItem; @@ -53,6 +54,8 @@ namespace Analysis void analyseTruthOrIfExpr(TruthOrIfExprNode *node, const WalkItem &wi, WalkItem &wo); + void analyseTruthAndExpr(TruthAndExprNode *node, const WalkItem &wi, WalkItem &wo); + void analyseTruthAndIfExpr(TruthAndIfExprNode *node, const WalkItem &wi, WalkItem &wo); void analyseCondExpr(CondExprNode *node, const WalkItem &wi, WalkItem &wo); |