diff options
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 (); |