diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2016-03-19 11:34:10 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2016-03-28 16:03:35 +0200 |
commit | 9d0d078ff297138622cd2f3f1076f5984395e42b (patch) | |
tree | f8b93311adc03410422b3d602ba000822394aebc /build2/variable.txx | |
parent | eb8b0f33b5e3b8a03d9c1b5230028ba9b9e8c391 (diff) |
Add support for pair representation reversibility
Diffstat (limited to 'build2/variable.txx')
-rw-r--r-- | build2/variable.txx | 27 |
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 (); |