From 1821a11704143a89581b26e285d968230b86a8ac Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Fri, 10 Feb 2017 17:27:55 +0200 Subject: Track variable value modifications --- build2/variable.cxx | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-) (limited to 'build2/variable.cxx') diff --git a/build2/variable.cxx b/build2/variable.cxx index 48f3345..7e105e6 100644 --- a/build2/variable.cxx +++ b/build2/variable.cxx @@ -1146,6 +1146,8 @@ namespace build2 load_generation == 0 || v.generation == load_generation); + // We assume typification is not modification. + // build2::typify (v, *var.type, &var); } @@ -1169,22 +1171,14 @@ namespace build2 } auto variable_map:: - find (const variable& var, bool typed) -> value_data* + find_to_modify (const variable& var, bool typed) -> value_data* { - auto i (m_.find (var)); - value_data* r (i != m_.end () ? &i->second : nullptr); + auto* r (const_cast (find (var, typed))); - // First access after being assigned a type? - // - if (r != nullptr && typed && var.type != nullptr && r->type != var.type) - { - // All values shall be typed during load. - // - assert (!global_ || phase == run_phase::load); - typify (*r, var); - } + if (r != nullptr) + r->version++; - return r; + return r; } pair, bool> variable_map:: @@ -1205,6 +1199,8 @@ namespace build2 typify (r, var); } + r.version++; + return make_pair (reference_wrapper (r), p.second); } -- cgit v1.1