diff options
author | Andrei Karas <akaras@inbox.ru> | 2015-06-30 18:10:04 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2015-06-30 18:10:04 +0300 |
commit | 125bcd31bd8b7e341bad7820331f65eb7cb91d0d (patch) | |
tree | 76fd8583b53ac42ac81b971adf74b74abe5b06e4 /src/analysis | |
parent | e06b95c40e9b9a75c24acbba429cfdd7b1e6e6ac (diff) | |
download | paranucker-125bcd31bd8b7e341bad7820331f65eb7cb91d0d.tar.gz paranucker-125bcd31bd8b7e341bad7820331f65eb7cb91d0d.tar.bz2 paranucker-125bcd31bd8b7e341bad7820331f65eb7cb91d0d.tar.xz paranucker-125bcd31bd8b7e341bad7820331f65eb7cb91d0d.zip |
Fix issue if linking var to child linked var. Now it always replaced to parent.
This allow do in code like this:
var1 = param1;
var2 = var1;
if (var2)
{
// do some work with param1 or var1 or var2
}
Diffstat (limited to 'src/analysis')
-rw-r--r-- | src/analysis/analysis.cpp | 5 | ||||
-rw-r--r-- | src/analysis/analysis.h | 2 |
2 files changed, 5 insertions, 2 deletions
diff --git a/src/analysis/analysis.cpp b/src/analysis/analysis.cpp index 7a5ead8..172917c 100644 --- a/src/analysis/analysis.cpp +++ b/src/analysis/analysis.cpp @@ -121,9 +121,12 @@ void removeNeedCheckNullVarsSet(WalkItem &wi, std::set<std::string> &vars) // link var to parent. (type var = parent) void addLinkedVar(WalkItem &wi, - const std::string &parent, + std::string parent, const std::string &var) { + // found parent as already linked var. need change parent to real parent + if (wi.linkedReverseVars.find(parent) != wi.linkedReverseVars.end()) + parent = wi.linkedReverseVars[parent]; if (wi.linkedVars.find(parent) == wi.linkedVars.end()) wi.linkedVars[parent] = std::set<std::string>(); wi.linkedVars[parent].insert(var); diff --git a/src/analysis/analysis.h b/src/analysis/analysis.h index 4b3ee28..fb4be9b 100644 --- a/src/analysis/analysis.h +++ b/src/analysis/analysis.h @@ -53,7 +53,7 @@ namespace Analysis const WalkItem &wi); void addLinkedVar(WalkItem &wi, - const std::string &parent, + std::string parent, const std::string &var); void removeNeedCheckNullVar(WalkItem &wi, std::string str); |