aboutsummaryrefslogtreecommitdiff
path: root/build2/target.cxx
diff options
context:
space:
mode:
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::