summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2015-06-17 17:06:42 +0300
committerAndrei Karas <akaras@inbox.ru>2015-06-17 17:25:25 +0300
commitf92d8d4c27a2c8602ac5ec888fc344d01a5da5cc (patch)
tree3a1cfb6c043dd7ee714f41418f2926d8db8ebf32
parentb2bcd7a94f4d44e5767b0d95881d331a567fa6f2 (diff)
downloadparanucker-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.cpp14
-rw-r--r--src/analysis/analysis.h4
-rw-r--r--src/analysis/declaration.cpp11
-rw-r--r--src/analysis/expression.cpp36
-rw-r--r--src/analysis/ref.cpp16
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);
}
}