summaryrefslogtreecommitdiff
path: root/src/analysis/collections.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/analysis/collections.cpp')
-rw-r--r--src/analysis/collections.cpp42
1 files changed, 42 insertions, 0 deletions
diff --git a/src/analysis/collections.cpp b/src/analysis/collections.cpp
index 81559f9..21c8ec1 100644
--- a/src/analysis/collections.cpp
+++ b/src/analysis/collections.cpp
@@ -19,6 +19,8 @@
#include "analysis/analysis.h"
+#include "logger.h"
+
#include "analysis/walkitem.h"
#include "localconsts.h"
@@ -234,4 +236,44 @@ void removeFromNeedCheckNullVars(WalkItem &wi, std::set<std::string> &vars)
}
}
+void addKnownNullVarsWithLinked(WalkItem &wo, WalkItem &wi, std::set<std::string> &vars)
+{
+ wo.knownNullVars.insert(vars.begin(),
+ vars.end());
+ FOR_EACH (it, vars)
+ {
+ auto it2 = wi.linkedVars.find(it);
+ if (it2 == wi.linkedVars.end() && isIn(it, wi.linkedReverseVars))
+ {
+ wo.knownNullVars.insert(wi.linkedReverseVars[it]);
+ it2 = wi.linkedVars.find(wi.linkedReverseVars[it]);
+ }
+ if (it2 != wi.linkedVars.end())
+ {
+ const StringSet &linked = (*it2).second;
+ wo.knownNullVars.insert(linked.begin(), linked.end());
+ }
+ }
+}
+
+void addKnownNonNullVarsWithLinked(WalkItem &wo, WalkItem &wi, std::set<std::string> &vars)
+{
+ wo.knownNonNullVars.insert(vars.begin(),
+ vars.end());
+ FOR_EACH (it, vars)
+ {
+ auto it2 = wi.linkedVars.find(it);
+ if (it2 == wi.linkedVars.end() && isIn(it, wi.linkedReverseVars))
+ {
+ wo.knownNonNullVars.insert(wi.linkedReverseVars[it]);
+ it2 = wi.linkedVars.find(wi.linkedReverseVars[it]);
+ }
+ if (it2 != wi.linkedVars.end())
+ {
+ const StringSet &linked = (*it2).second;
+ wo.knownNonNullVars.insert(linked.begin(), linked.end());
+ }
+ }
+}
+
}