aboutsummaryrefslogtreecommitdiff
path: root/build2/variable.txx
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2016-03-19 11:34:10 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2016-03-28 16:03:35 +0200
commit9d0d078ff297138622cd2f3f1076f5984395e42b (patch)
treef8b93311adc03410422b3d602ba000822394aebc /build2/variable.txx
parenteb8b0f33b5e3b8a03d9c1b5230028ba9b9e8c391 (diff)
Add support for pair representation reversibility
Diffstat (limited to 'build2/variable.txx')
-rw-r--r--build2/variable.txx27
1 files changed, 22 insertions, 5 deletions
diff --git a/build2/variable.txx b/build2/variable.txx
index 54e48a3..7a0d53a 100644
--- a/build2/variable.txx
+++ b/build2/variable.txx
@@ -12,13 +12,30 @@ namespace build2
bool
vector_assign (names& v, const variable& var)
{
- // Verify each element has valid value of T.
+ // Verify each element has valid value of T. Merge pairs.
//
- for (name& n: v)
+ for (auto i (v.begin ()); i != v.end (); )
{
- if (!assign<T> (n))
- fail << "invalid " << value_traits<T>::value_type.name << " element "
- << "'" << n << "' in variable '" << var.name << "'";
+ name& n (*i);
+
+ if (n.pair)
+ {
+ name& r (*++i);
+
+ if (!assign<T> (n, r))
+ fail << "invalid " << value_traits<T>::value_type.name
+ << " pair '" << n << "'@'" << r << "'"
+ << " in variable '" << var.name << "'";
+
+ i = v.erase (i);
+ }
+ else
+ {
+ if (!assign<T> (n))
+ fail << "invalid " << value_traits<T>::value_type.name
+ << " element '" << n << "' in variable '" << var.name << "'";
+ ++i;
+ }
}
return !v.empty ();