From 7253ffee27f6cae34e63a72b2d3d10db10571ecc Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Thu, 31 Mar 2016 10:59:45 +0200 Subject: Clean up variable lookup interfaces --- build2/target.cxx | 49 ++++++++++--------------------------------------- 1 file changed, 10 insertions(+), 39 deletions(-) (limited to 'build2/target.cxx') diff --git a/build2/target.cxx b/build2/target.cxx index 9d2f7af..e945d6d 100644 --- a/build2/target.cxx +++ b/build2/target.cxx @@ -114,55 +114,26 @@ namespace build2 return *r; } - lookup target:: + lookup target:: operator[] (const variable& var) const { - using result = lookup; - if (auto p = vars.find (var)) - return result (p, &vars); + return lookup (p, &vars); if (group != nullptr) { if (auto p = group->vars.find (var)) - return result (p, &group->vars); + return lookup (p, &group->vars); } - // We cannot simply delegate to scope's lookup() since we also need - // to check the group. + // Delegate to scope's find(). // - for (const scope* s (&base_scope ()); s != nullptr; ) - { - if (!s->target_vars.empty ()) - { - if (auto l = s->target_vars.lookup (type (), name, var)) - return l; - - if (group != nullptr) - { - if (auto l = s->target_vars.lookup (group->type (), group->name, var)) - return l; - } - } - - if (auto r = s->vars.find (var)) - return result (r, &s->vars); - - switch (var.visibility) - { - case variable_visibility::scope: - s = nullptr; - break; - case variable_visibility::project: - s = s->root () ? nullptr : s->parent_scope (); - break; - case variable_visibility::normal: - s = s->parent_scope (); - break; - } - } - - return result (); + return base_scope ().find ( + var, + &type (), + &name, + group != nullptr ? &group->type () : nullptr, + group != nullptr ? &group->name : nullptr); } value& target:: -- cgit v1.1