diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2016-04-01 09:49:18 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2016-04-01 09:49:18 +0200 |
commit | 26146d391f179dd9e4e5e1f70a52ba99d6a0847d (patch) | |
tree | c79762ff1fd15bfa25fdeacf9f9e6efe338354bf /build2/target.cxx | |
parent | 7253ffee27f6cae34e63a72b2d3d10db10571ecc (diff) |
Get part of variable override implementation
Diffstat (limited to 'build2/target.cxx')
-rw-r--r-- | build2/target.cxx | 33 |
1 files changed, 24 insertions, 9 deletions
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:: |