diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2019-03-14 17:20:02 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2019-03-14 17:20:02 +0200 |
commit | e20a351013745e8d6c3a0a99bd40c172ed0ae8be (patch) | |
tree | b0e6d24dbc097c2001e6bb4b0c0357bcb83bdc72 /build2/variable.cxx | |
parent | d1b3ad7b302d037c8154bab9c4810d499c0bf1e4 (diff) |
Add support for multiple variable overrides
Now we can do:
$ b config.cxx.coptions=-O3 config.cxx.coptions=-O0
Or even:
$ b config.cxx.coptions=-O3 config.cxx.coptions+=-g
Diffstat (limited to 'build2/variable.cxx')
-rw-r--r-- | build2/variable.cxx | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/build2/variable.cxx b/build2/variable.cxx index 264928f..173efe5 100644 --- a/build2/variable.cxx +++ b/build2/variable.cxx @@ -1142,7 +1142,7 @@ namespace build2 // Check overridability (all overrides, if any, should already have // been entered (see context.cxx:reset()). // - if (var.override != nullptr && (o == nullptr || !*o)) + if (var.overrides != nullptr && (o == nullptr || !*o)) fail << "variable " << var.name << " cannot be overridden"; bool ut (t != nullptr && var.type != t); @@ -1150,7 +1150,7 @@ namespace build2 // Variable should not be updated post-aliasing. // - assert (var.alias == &var || (!ut && !uv)); + assert (var.aliases == &var || (!ut && !uv)); // Update type? // @@ -1277,12 +1277,12 @@ namespace build2 variable& r (p.first->second); if (p.second) - r.alias = &r; + r.aliases = &r; else // Note: overridden variable will always exist. { if (t != nullptr || v != nullptr || o != nullptr) update (r, t, v, o); // Not changing the key. - else if (r.override != nullptr) + else if (r.overrides != nullptr) fail << "variable " << r.name << " cannot be overridden"; } @@ -1292,7 +1292,7 @@ namespace build2 const variable& variable_pool:: insert_alias (const variable& var, string n) { - assert (var.alias != nullptr && var.override == nullptr); + assert (var.aliases != nullptr && var.overrides == nullptr); variable& a (insert (move (n), var.type, @@ -1300,13 +1300,13 @@ namespace build2 nullptr /* override */, false /* pattern */)); - if (a.alias == &a) // Not aliased yet. + if (a.aliases == &a) // Not aliased yet. { - a.alias = var.alias; - const_cast<variable&> (var).alias = &a; + a.aliases = var.aliases; + const_cast<variable&> (var).aliases = &a; } else - assert (a.aliases (var)); // Make sure it is already an alias of var. + assert (a.alias (var)); // Make sure it is already an alias of var. return a; } @@ -1406,7 +1406,7 @@ namespace build2 break; } - v = v->alias; + v = v->aliases; } while (v != &var && v != nullptr); |