aboutsummaryrefslogtreecommitdiff
path: root/build2/variable.txx
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2017-04-19 08:03:46 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2017-04-19 08:03:46 +0200
commit49b6de46afac29898d47c1f38f1ad0b57ea041af (patch)
tree60b9b8e55bb7f79e4cf84a95bc8689b37790e0b7 /build2/variable.txx
parentba9137db8e456eb00b921a855e5383b78fa7a8ec (diff)
Fix typification bug in variable_cache
Diffstat (limited to 'build2/variable.txx')
-rw-r--r--build2/variable.txx10
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));
}