diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2017-04-19 08:03:46 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2017-04-19 08:03:46 +0200 |
commit | 49b6de46afac29898d47c1f38f1ad0b57ea041af (patch) | |
tree | 60b9b8e55bb7f79e4cf84a95bc8689b37790e0b7 /build2/variable.txx | |
parent | ba9137db8e456eb00b921a855e5383b78fa7a8ec (diff) |
Fix typification bug in variable_cache
Diffstat (limited to 'build2/variable.txx')
-rw-r--r-- | build2/variable.txx | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/build2/variable.txx b/build2/variable.txx index 038f107..c7d3e5a 100644 --- a/build2/variable.txx +++ b/build2/variable.txx @@ -557,7 +557,7 @@ namespace build2 // template <typename K> pair<value&, ulock> variable_cache<K>:: - insert (K k, const lookup& stem, size_t ver) + insert (K k, const lookup& stem, size_t ver, const variable& var) { using value_data = variable_map::value_data; @@ -580,7 +580,8 @@ namespace build2 if (i != m_.end () && i->second.version == ver && i->second.stem_vars == svars && - i->second.stem_version == sver) + i->second.stem_version == sver && + (var.type == nullptr || i->second.value.type == var.type)) return pair<value&, ulock> (i->second.value, move (ul)); // Relock for exclusive access. Note that it is entirely possible @@ -625,9 +626,14 @@ namespace build2 e.value.version++; // Value changed. } else + { // Cache hit. // + if (var.type != nullptr && e.value.type != var.type) + typify (e.value, *var.type, &var); + ul.unlock (); + } return pair<value&, ulock> (e.value, move (ul)); } |