diff options
author | Andrei Karas <akaras@inbox.ru> | 2015-06-25 13:32:57 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2015-06-25 14:25:52 +0300 |
commit | 06b55fde7a240a86cab66d9c0b756aac9b00f96a (patch) | |
tree | 620f725dd34b78398ce4df7ec4ad368d2706357d /src | |
parent | 6df4368beeb6fc37aeeff5b0698ce75053cb05ea (diff) | |
download | paranucker-06b55fde7a240a86cab66d9c0b756aac9b00f96a.tar.gz paranucker-06b55fde7a240a86cab66d9c0b756aac9b00f96a.tar.bz2 paranucker-06b55fde7a240a86cab66d9c0b756aac9b00f96a.tar.xz paranucker-06b55fde7a240a86cab66d9c0b756aac9b00f96a.zip |
Add into analysis node INIT_EXPR.
Diffstat (limited to 'src')
-rw-r--r-- | src/analysis/analysis.cpp | 4 | ||||
-rw-r--r-- | src/analysis/expression.cpp | 16 | ||||
-rw-r--r-- | src/analysis/expression.h | 3 |
3 files changed, 23 insertions, 0 deletions
diff --git a/src/analysis/analysis.cpp b/src/analysis/analysis.cpp index f0dc245..2be2381 100644 --- a/src/analysis/analysis.cpp +++ b/src/analysis/analysis.cpp @@ -40,6 +40,7 @@ #include "nodes/expr/cond_expr.h" #include "nodes/expr/decl_expr.h" #include "nodes/expr/eq_expr.h" +#include "nodes/expr/init_expr.h" #include "nodes/expr/modify_expr.h" #include "nodes/expr/ne_expr.h" #include "nodes/expr/nonlvalue_expr.h" @@ -359,6 +360,9 @@ void analyseNode(Node *node, const WalkItem &wi, WalkItem &wo) case DECL_EXPR: analyseDeclExpr(static_cast<DeclExprNode*>(node), wi2, wo); break; + case INIT_EXPR: + analyseInitExpr(static_cast<InitExprNode*>(node), wi2, wo); + break; case MODIFY_EXPR: analyseModifyExpr(static_cast<ModifyExprNode*>(node), wi2, wo); break; diff --git a/src/analysis/expression.cpp b/src/analysis/expression.cpp index 959cc79..fbad407 100644 --- a/src/analysis/expression.cpp +++ b/src/analysis/expression.cpp @@ -34,6 +34,7 @@ #include "nodes/expr/cond_expr.h" #include "nodes/expr/decl_expr.h" #include "nodes/expr/eq_expr.h" +#include "nodes/expr/init_expr.h" #include "nodes/expr/modify_expr.h" #include "nodes/expr/ne_expr.h" #include "nodes/expr/nonlvalue_expr.h" @@ -515,4 +516,19 @@ void analyseCleanupPointExpr(CleanupPointExprNode* node, const WalkItem &wi, Wal wo.stopWalking = true; } +void analyseInitExpr(InitExprNode* node, const WalkItem &wi, WalkItem &wo) +{ + // need one arg for check + if (node->args.size() < 2 || command == FindArgs) + return; + + // var1 = var2 + std::string var1 = getVariableName(node->args[0]); + std::string var2 = getVariableName(node->args[1]); + if (var1.empty() || var2.empty()) + return; + wo.addNullVars.insert(var1); + addLinkedVar(wo, var2, var1); +} + } diff --git a/src/analysis/expression.h b/src/analysis/expression.h index 825f73a..2a23256 100644 --- a/src/analysis/expression.h +++ b/src/analysis/expression.h @@ -30,6 +30,7 @@ struct CompoundExprNode; struct CondExprNode; struct DeclExprNode; struct EqExprNode; +struct InitExprNode; struct ModifyExprNode; struct NeExprNode; struct Node; @@ -81,6 +82,8 @@ namespace Analysis void analyseNonLvalueExpr(NonLvalueExprNode *node, const WalkItem &wi, WalkItem &wo); + void analyseInitExpr(InitExprNode* node, const WalkItem &wi, WalkItem &wo); + std::string getComponentRefVariable(Node *node); } |