diff options
Diffstat (limited to 'src/analysis')
-rw-r--r-- | src/analysis/collections.cpp | 11 | ||||
-rw-r--r-- | src/analysis/collections.h | 2 | ||||
-rw-r--r-- | src/analysis/statement.cpp | 3 |
3 files changed, 16 insertions, 0 deletions
diff --git a/src/analysis/collections.cpp b/src/analysis/collections.cpp index b7acf6d..e9acce6 100644 --- a/src/analysis/collections.cpp +++ b/src/analysis/collections.cpp @@ -58,6 +58,17 @@ void addNeedCheckNullVars2(WalkItem &wi, WalkItem &wo) } } +void removeKnownNullVars2(WalkItem &wi, WalkItem &wo) +{ + FOR_EACH (it, wo.knownNullVars) + { + if (isNotIn(it, wi.knownNullVars)) + { + wo.knownNullVars.erase(it); + } + } +} + void removeNeedCheckNullVars2(WalkItem &wco, WalkItem &wi, WalkItem &wo) { FOR_EACH (it, wi.knownNonNullVars) diff --git a/src/analysis/collections.h b/src/analysis/collections.h index feb0eca..e81cc7e 100644 --- a/src/analysis/collections.h +++ b/src/analysis/collections.h @@ -95,6 +95,8 @@ namespace Analysis void addKnownNonNullVarWithLinked(WalkItem &wo, WalkItem &wi, const std::string &var); void removeNeedCheckNullVarOnly(WalkItem &wi, const std::string &var); + + void removeKnownNullVars2(WalkItem &wi, WalkItem &wo); } #endif // ANALYSIS_COLLECTIONS_H diff --git a/src/analysis/statement.cpp b/src/analysis/statement.cpp index 611ad26..573b5ec 100644 --- a/src/analysis/statement.cpp +++ b/src/analysis/statement.cpp @@ -127,6 +127,7 @@ void analyseCondition(Node *node, { addNeedCheckNullVars2(wo2, wo); removeNeedCheckNullVars2(wco, wo2, wo); + removeKnownNullVars2(wo2, wo); } if (wo3.isReturned || wo3.isContinued) { @@ -146,6 +147,7 @@ void analyseCondition(Node *node, { addNeedCheckNullVars2(wo3, wo); removeNeedCheckNullVars2(wco, wo2, wo); + removeKnownNullVars2(wo3, wo); } if ((wo2.isReturned || wo2.isContinued) && (wo3.isReturned || wo3.isContinued)) { @@ -248,6 +250,7 @@ void analyseWhileStmt(WhileStmtNode *node, const WalkItem &wi, WalkItem &wo) Log::dumpWI(node, "wco2 ", wco); removeNeedCheckNullVars2(wcoSaved, wo2Saved, wo); + removeKnownNullVars2(wo2Saved, wo); } wo.isReturned = false; |