summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2015-06-15 02:19:02 +0300
committerAndrei Karas <akaras@inbox.ru>2015-06-15 02:19:02 +0300
commitf2f31ff386a2823a6b71634ab5d6b414fbd9f9d3 (patch)
tree5cf502bf1c2a69cea9fd42e010796a58b5ee7962
parent054e89055decdf6b61a5f9430fc430b5704b4539 (diff)
downloadparanucker-f2f31ff386a2823a6b71634ab5d6b414fbd9f9d3.tar.gz
paranucker-f2f31ff386a2823a6b71634ab5d6b414fbd9f9d3.tar.bz2
paranucker-f2f31ff386a2823a6b71634ab5d6b414fbd9f9d3.tar.xz
paranucker-f2f31ff386a2823a6b71634ab5d6b414fbd9f9d3.zip
Detect nullpointers also in methods.
-rw-r--r--src/analysis/function.cpp12
1 files changed, 9 insertions, 3 deletions
diff --git a/src/analysis/function.cpp b/src/analysis/function.cpp
index 59406ed..37078c3 100644
--- a/src/analysis/function.cpp
+++ b/src/analysis/function.cpp
@@ -29,6 +29,8 @@
#include "nodes/list/tree_list.h"
+#include "nodes/type/method_type.h"
+
#include <set>
#include "localconsts.h"
@@ -44,12 +46,16 @@ void getFunctionArgTypes(FunctionDeclNode *node,
if (!node->functionType)
return;
- // need impliment also for METHOD_TYPE
- if (node->functionType->nodeType != FUNCTION_TYPE)
+ TreeListNode *types = nullptr;
+ if (node->functionType->nodeType == FUNCTION_TYPE)
+ types = static_cast<FunctionTypeNode*>(node->functionType)->argTypes;
+ else if (node->functionType->nodeType == METHOD_TYPE)
+ types = static_cast<MethodTypeNode*>(node->functionType)->argTypes;
+ else
return;
// walk in TREE_LIST and get value nodes
- FOR_TREE_LIST2(list, static_cast<FunctionTypeNode*>(node->functionType)->argTypes)
+ FOR_TREE_LIST2(list, types)
{
arr.push_back(static_cast<TypeNode*>(list->value));
}