From 26146d391f179dd9e4e5e1f70a52ba99d6a0847d Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Fri, 1 Apr 2016 09:49:18 +0200 Subject: Get part of variable override implementation --- build2/target.cxx | 33 ++++++++++++++++++++++++--------- 1 file changed, 24 insertions(+), 9 deletions(-) (limited to 'build2/target.cxx') diff --git a/build2/target.cxx b/build2/target.cxx index e945d6d..f1f0637 100644 --- a/build2/target.cxx +++ b/build2/target.cxx @@ -117,23 +117,38 @@ namespace build2 lookup target:: operator[] (const variable& var) const { + lookup l; + bool tspec (false); + + scope& s (base_scope ()); + if (auto p = vars.find (var)) - return lookup (p, &vars); + { + tspec = true; + l = lookup (p, &vars); + } - if (group != nullptr) + if (!l && group != nullptr) { if (auto p = group->vars.find (var)) - return lookup (p, &group->vars); + { + tspec = true; + l = lookup (p, &group->vars); + } } // Delegate to scope's find(). // - return base_scope ().find ( - var, - &type (), - &name, - group != nullptr ? &group->type () : nullptr, - group != nullptr ? &group->name : nullptr); + if (!l) + l = s.find_original (var, + &type (), + &name, + group != nullptr ? &group->type () : nullptr, + group != nullptr ? &group->name : nullptr); + + return var.override == nullptr + ? l + : s.find_override (var, move (l), tspec); } value& target:: -- cgit v1.1