summaryrefslogtreecommitdiff
path: root/src/analysis
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2015-06-30 18:10:04 +0300
committerAndrei Karas <akaras@inbox.ru>2015-06-30 18:10:04 +0300
commit125bcd31bd8b7e341bad7820331f65eb7cb91d0d (patch)
tree76fd8583b53ac42ac81b971adf74b74abe5b06e4 /src/analysis
parente06b95c40e9b9a75c24acbba429cfdd7b1e6e6ac (diff)
downloadparanucker-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.cpp5
-rw-r--r--src/analysis/analysis.h2
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);