aboutsummaryrefslogtreecommitdiff
path: root/build2/target.cxx
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2016-04-01 09:49:18 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2016-04-01 09:49:18 +0200
commit26146d391f179dd9e4e5e1f70a52ba99d6a0847d (patch)
treec79762ff1fd15bfa25fdeacf9f9e6efe338354bf /build2/target.cxx
parent7253ffee27f6cae34e63a72b2d3d10db10571ecc (diff)
Get part of variable override implementation
Diffstat (limited to 'build2/target.cxx')
-rw-r--r--build2/target.cxx33
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::