aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libbuild2/config/utility.cxx29
-rw-r--r--libbuild2/config/utility.hxx3
2 files changed, 23 insertions, 9 deletions
diff --git a/libbuild2/config/utility.cxx b/libbuild2/config/utility.cxx
index 7437c5b..243c03a 100644
--- a/libbuild2/config/utility.cxx
+++ b/libbuild2/config/utility.cxx
@@ -160,23 +160,34 @@ namespace build2
pair<variable_origin, lookup>
origin (const scope& rs, const string& n)
{
+ const variable* var (rs.ctx.var_pool.find (n));
+
+ if (var == nullptr)
+ {
+ if (n.compare (0, 7, "config.") != 0)
+ throw invalid_argument ("config.* variable expected");
+
+ return make_pair (variable_origin::undefined, lookup ());
+ }
+
+ return origin (rs, *var);
+ }
+
+ pair<variable_origin, lookup>
+ origin (const scope& rs, const variable& var)
+ {
// Make sure this is a config.* variable. This could matter since we
// reply on the semantics of value::extra. We could also detect
// special variables like config.booted, some config.config.*, etc.,
// (see config_save() for details) but that seems harmless.
//
- if (n.compare (0, 7, "config.") != 0)
+ if (var.name.compare (0, 7, "config.") != 0)
throw invalid_argument ("config.* variable expected");
- const variable* var (rs.ctx.var_pool.find (n));
-
- if (var == nullptr)
- return make_pair (variable_origin::undefined, lookup ());
-
- pair<lookup, size_t> org (rs.lookup_original (*var));
- pair<lookup, size_t> ovr (var->overrides == nullptr
+ pair<lookup, size_t> org (rs.lookup_original (var));
+ pair<lookup, size_t> ovr (var.overrides == nullptr
? org
- : rs.lookup_override (*var, org));
+ : rs.lookup_override (var, org));
if (!ovr.first.defined ())
return make_pair (variable_origin::undefined, lookup ());
diff --git a/libbuild2/config/utility.hxx b/libbuild2/config/utility.hxx
index 5a00d00..050339a 100644
--- a/libbuild2/config/utility.hxx
+++ b/libbuild2/config/utility.hxx
@@ -517,6 +517,9 @@ namespace build2
LIBBUILD2_SYMEXPORT pair<variable_origin, lookup>
origin (const scope& rs, const string& name);
+
+ LIBBUILD2_SYMEXPORT pair<variable_origin, lookup>
+ origin (const scope& rs, const variable&);
}
}