diff options
author | Andrei Karas <akaras@inbox.ru> | 2015-07-06 19:46:29 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2015-07-06 19:54:44 +0300 |
commit | 11ffbed13d101e4bd625f9433006a664fe24f95f (patch) | |
tree | 1f49349afd666a4123a7e6189803607163b8f496 /src/analysis/expression.cpp | |
parent | 64626d6f9f399cd6ae367e449d51943284513886 (diff) | |
download | paranucker-11ffbed13d101e4bd625f9433006a664fe24f95f.tar.gz paranucker-11ffbed13d101e4bd625f9433006a664fe24f95f.tar.bz2 paranucker-11ffbed13d101e4bd625f9433006a664fe24f95f.tar.xz paranucker-11ffbed13d101e4bd625f9433006a664fe24f95f.zip |
Track variable for checking null pointer assigned from function call only if function return pointer.
Update METHOD_TYPE for always parse function return type.
Diffstat (limited to 'src/analysis/expression.cpp')
-rw-r--r-- | src/analysis/expression.cpp | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/src/analysis/expression.cpp b/src/analysis/expression.cpp index 7c5194e..b6e00ca 100644 --- a/src/analysis/expression.cpp +++ b/src/analysis/expression.cpp @@ -59,6 +59,8 @@ #include "nodes/ref/indirect_ref.h" #include "nodes/ref/objtype_ref.h" +#include "nodes/type/method_type.h" + #include <set> #include "localconsts.h" @@ -103,6 +105,10 @@ bool isPointerArg(Node *node) if (skipNop(var->varType) == POINTER_TYPE) return true; } + else if (node == COMPONENT_REF) + { + return true; + } return false; } @@ -752,6 +758,16 @@ bool handleSetVarToFunction(const std::string &var, if (!func->functionType) return false; + Node *returnType; + if (func->functionType == FUNCTION_TYPE) + returnType = static_cast<FunctionTypeNode*>(func->functionType)->returnType; + else if (func->functionType == METHOD_TYPE) + returnType = static_cast<MethodTypeNode*>(func->functionType)->returnType; + else + return false; + if (returnType != POINTER_TYPE) + return false; + if (findTreeListPurpose(static_cast<TreeListNode*>(func->functionType->attribute), "returns_nonnull")) { // function have attribute returns_nonnull. This mean result cant be null |