From 9d0d078ff297138622cd2f3f1076f5984395e42b Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Sat, 19 Mar 2016 11:34:10 +0200 Subject: Add support for pair representation reversibility --- build2/variable.txx | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) (limited to 'build2/variable.txx') 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 (n)) - fail << "invalid " << value_traits::value_type.name << " element " - << "'" << n << "' in variable '" << var.name << "'"; + name& n (*i); + + if (n.pair) + { + name& r (*++i); + + if (!assign (n, r)) + fail << "invalid " << value_traits::value_type.name + << " pair '" << n << "'@'" << r << "'" + << " in variable '" << var.name << "'"; + + i = v.erase (i); + } + else + { + if (!assign (n)) + fail << "invalid " << value_traits::value_type.name + << " element '" << n << "' in variable '" << var.name << "'"; + ++i; + } } return !v.empty (); -- cgit v1.1