summaryrefslogtreecommitdiff
path: root/src/analysis/collections.cpp
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2015-07-10 01:09:26 +0300
committerAndrei Karas <akaras@inbox.ru>2015-07-10 01:09:26 +0300
commit448b1a6a299033709e2fb585ac4b7f7c29cde919 (patch)
tree1ea71651b3e7318d1d471925754f4d51359501f1 /src/analysis/collections.cpp
parentf21d3beacdcdf9f86dbc06a9aa356ff07d6e4b39 (diff)
downloadparanucker-448b1a6a299033709e2fb585ac4b7f7c29cde919.tar.gz
paranucker-448b1a6a299033709e2fb585ac4b7f7c29cde919.tar.bz2
paranucker-448b1a6a299033709e2fb585ac4b7f7c29cde919.tar.xz
paranucker-448b1a6a299033709e2fb585ac4b7f7c29cde919.zip
Add ability to check variables assigned in if/while and check outside of this block.
Diffstat (limited to 'src/analysis/collections.cpp')
-rw-r--r--src/analysis/collections.cpp27
1 files changed, 12 insertions, 15 deletions
diff --git a/src/analysis/collections.cpp b/src/analysis/collections.cpp
index 0f3a8f8..92dd51f 100644
--- a/src/analysis/collections.cpp
+++ b/src/analysis/collections.cpp
@@ -35,13 +35,6 @@ void addNeedCheckNullVars(WalkItem &wi, WalkItem &wo)
{
wo.needCheckNullVars.insert(it);
wo.knownVars.insert(it);
-/*
- wo.knownNonNullVars.erase(it);
- wo.knownNullVars.erase(it);
- wo.removeNullVars.erase(it);
- wo.removeNullVarsAll.erase(it);
- wo.addNullVars.insert(it);
-*/
}
}
@@ -50,13 +43,16 @@ void addNeedCheckNullVars2(WalkItem &wi, WalkItem &wo)
{
FOR_EACH (it, wi.addNullVars)
{
- wo.needCheckNullVars.insert(it);
- wo.knownVars.insert(it);
- wo.knownNonNullVars.erase(it);
- wo.knownNullVars.erase(it);
- wo.removeNullVars.erase(it);
- wo.removeNullVarsAll.erase(it);
- wo.addNullVars.insert(it);
+ if (isNotIn(it, wo.addNullVars))
+ {
+ wo.needCheckNullVars.insert(it);
+ wo.knownVars.insert(it);
+ wo.knownNonNullVars.erase(it);
+ wo.knownNullVars.erase(it);
+ wo.removeNullVars.erase(it);
+ wo.removeNullVarsAll.erase(it);
+ wo.addNullVars.insert(it);
+ }
}
}
@@ -167,6 +163,7 @@ void addUnknownVar(WalkItem &wi,
wi.knownNonNullVars.erase(var);
wi.addNullVars.insert(var);
wi.removeNullVars.erase(var);
+ wi.removeNullVarsAll.erase(var);
}
void addNonNullVar(WalkItem &wi,
@@ -184,7 +181,7 @@ void addLinkedVar(WalkItem &wi,
std::string parent,
const std::string &var)
{
- //Log::log("add var: %s, %s\n", parent.c_str(), var.c_str());
+ //Log::log("addLinkedVar: %s, %s\n", parent.c_str(), var.c_str());
if (isIn(parent, wi.addNullVars) ||
isIn(parent, wi.needCheckNullVars))
{