diff options
author | Andrei Karas <akaras@inbox.ru> | 2015-06-17 17:06:42 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2015-06-17 17:25:25 +0300 |
commit | f92d8d4c27a2c8602ac5ec888fc344d01a5da5cc (patch) | |
tree | 3a1cfb6c043dd7ee714f41418f2926d8db8ebf32 | |
parent | b2bcd7a94f4d44e5767b0d95881d331a567fa6f2 (diff) | |
download | paranucker-f92d8d4c27a2c8602ac5ec888fc344d01a5da5cc.tar.gz paranucker-f92d8d4c27a2c8602ac5ec888fc344d01a5da5cc.tar.bz2 paranucker-f92d8d4c27a2c8602ac5ec888fc344d01a5da5cc.tar.xz paranucker-f92d8d4c27a2c8602ac5ec888fc344d01a5da5cc.zip |
Extract null pointer reporting code into separate function.
-rw-r--r-- | src/analysis/analysis.cpp | 14 | ||||
-rw-r--r-- | src/analysis/analysis.h | 4 | ||||
-rw-r--r-- | src/analysis/declaration.cpp | 11 | ||||
-rw-r--r-- | src/analysis/expression.cpp | 36 | ||||
-rw-r--r-- | src/analysis/ref.cpp | 16 |
5 files changed, 27 insertions, 54 deletions
diff --git a/src/analysis/analysis.cpp b/src/analysis/analysis.cpp index f3a9631..ca689e1 100644 --- a/src/analysis/analysis.cpp +++ b/src/analysis/analysis.cpp @@ -101,6 +101,20 @@ int findBackLocation(Node *node) return loc; } +void reportParmDeclNullPointer(Node *mainNode, + Node *node, + const WalkItem &wi) +{ + if (node && node->nodeType == PARM_DECL) + { + if (wi.checkNullVars.find(node->label) != wi.checkNullVars.end()) + { + Log::warn(findBackLocation(mainNode), + "Using variable without check for NULL"); + } + } +} + void analyseNode(Node *node, const WalkItem &wi, WalkItem &wo) { if (!node) diff --git a/src/analysis/analysis.h b/src/analysis/analysis.h index 596988c..87990f4 100644 --- a/src/analysis/analysis.h +++ b/src/analysis/analysis.h @@ -35,6 +35,10 @@ namespace Analysis int findBackLocation(Node *node); + void reportParmDeclNullPointer(Node *mainNode, + Node *node, + const WalkItem &wi); + void removeCheckNullVars(WalkItem &wi); } diff --git a/src/analysis/declaration.cpp b/src/analysis/declaration.cpp index f97399e..322b4dc 100644 --- a/src/analysis/declaration.cpp +++ b/src/analysis/declaration.cpp @@ -40,16 +40,7 @@ void analyseVarDecl(VarDeclNode *node, const WalkItem &wi, WalkItem &wo) if (!node->initial || command == FindArgs) return; - Node *initial = node->initial; - if (initial && initial->nodeType == PARM_DECL) - { - if (wi.checkNullVars.find(initial->label) != wi.checkNullVars.end()) - { - Log::warn(findBackLocation(node), - "Using variable without check for NULL"); - } - } - + reportParmDeclNullPointer(node, node->initial, wi); return; } diff --git a/src/analysis/expression.cpp b/src/analysis/expression.cpp index d3fbf73..0fbb9c5 100644 --- a/src/analysis/expression.cpp +++ b/src/analysis/expression.cpp @@ -47,19 +47,9 @@ void analyseModifyExpr(ModifyExprNode *node, const WalkItem &wi, WalkItem &wo) Node *arg = node->args[0]; if (arg && arg->nodeType == INDIRECT_REF) { - IndirectRefNode *refNode = static_cast<IndirectRefNode*>(arg); - // need atleast one arg for check - if (refNode->ref == nullptr) - return; - arg = refNode->ref; - if (arg->nodeType == PARM_DECL) - { - if (wi.checkNullVars.find(arg->label) != wi.checkNullVars.end()) - { - Log::warn(findBackLocation(node), - "Using variable without check for NULL"); - } - } + reportParmDeclNullPointer(node, + static_cast<IndirectRefNode*>(arg)->ref, + wi); } } @@ -69,15 +59,7 @@ void analysePointerPlusExpr(PointerPlusExprNode *node, const WalkItem &wi, WalkI if (node->args.empty() || command == FindArgs) return; - Node *arg = node->args[0]; - if (arg && arg->nodeType == PARM_DECL) - { - if (wi.checkNullVars.find(arg->label) != wi.checkNullVars.end()) - { - Log::warn(findBackLocation(node), - "Using variable without check for NULL"); - } - } + reportParmDeclNullPointer(node, node->args[0], wi); } void analyseAddrExpr(AddrExprNode *node, const WalkItem &wi, WalkItem &wo) @@ -86,15 +68,7 @@ void analyseAddrExpr(AddrExprNode *node, const WalkItem &wi, WalkItem &wo) if (node->args.empty() || command == FindArgs) return; - Node *arg = node->args[0]; - if (arg && arg->nodeType == PARM_DECL) - { - if (wi.checkNullVars.find(arg->label) != wi.checkNullVars.end()) - { - Log::warn(findBackLocation(node), - "Using variable without check for NULL"); - } - } + reportParmDeclNullPointer(node, node->args[0], wi); } } diff --git a/src/analysis/ref.cpp b/src/analysis/ref.cpp index 575fd68..c8b45b8 100644 --- a/src/analysis/ref.cpp +++ b/src/analysis/ref.cpp @@ -48,19 +48,9 @@ void analyseComponentRef(ComponentRefNode *node, const WalkItem &wi, WalkItem &w Node *arg = node->object; if (arg && arg->nodeType == INDIRECT_REF) { - IndirectRefNode *refNode = static_cast<IndirectRefNode*>(arg); - // need atleast one arg for check - if (refNode->ref == nullptr) - return; - arg = refNode->ref; - if (arg->nodeType == PARM_DECL) - { - if (wi.checkNullVars.find(arg->label) != wi.checkNullVars.end()) - { - Log::warn(findBackLocation(node), - "Using variable without check for NULL"); - } - } + reportParmDeclNullPointer(node, + static_cast<IndirectRefNode*>(arg)->ref, + wi); } } |