diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2015-12-01 15:37:04 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2015-12-01 15:37:04 +0200 |
commit | 74212589a797ca75e55f92a522e198915c0dbaf6 (patch) | |
tree | 6e16ed2ed816c66a0c3edef74c1f1e050fa0e272 /build/scope.cxx | |
parent | 10fd2aface4486fc7f873dd2b54a1c2073c0b434 (diff) |
Use 'extension' variable to resolve extension for file{}
We now also check target type/pattern-specific variables. So the new
usage is:
cli{*}: extension = cli
Diffstat (limited to 'build/scope.cxx')
-rw-r--r-- | build/scope.cxx | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/build/scope.cxx b/build/scope.cxx index d407ce0..305950b 100644 --- a/build/scope.cxx +++ b/build/scope.cxx @@ -15,6 +15,8 @@ namespace build lookup<const value> scope:: operator[] (const variable& var) const { + using result = build::lookup<const value>; + const value* r (nullptr); const scope* s (this); @@ -24,7 +26,27 @@ namespace build break; } - return lookup<const value> (r, &s->vars); + return result (r, &s->vars); + } + + lookup<const value> scope:: + lookup (const target_type& tt, const string& name, const variable& var) const + { + using result = build::lookup<const value>; + + for (const scope* s (this); s != nullptr; s = s->parent_scope ()) + { + if (!s->target_vars.empty ()) + { + if (auto l = s->target_vars.lookup (tt, name, var)) + return l; + } + + if (auto r = s->vars.find (var)) + return result (r, &s->vars); + } + + return result (); } value& scope:: |