diff options
author | Andrei Karas <akaras@inbox.ru> | 2015-07-10 01:09:26 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2015-07-10 01:09:26 +0300 |
commit | 448b1a6a299033709e2fb585ac4b7f7c29cde919 (patch) | |
tree | 1ea71651b3e7318d1d471925754f4d51359501f1 /src/analysis/collections.cpp | |
parent | f21d3beacdcdf9f86dbc06a9aa356ff07d6e4b39 (diff) | |
download | paranucker-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.cpp | 27 |
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)) { |