diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2016-07-16 10:51:35 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2016-07-16 10:51:35 +0200 |
commit | b439803cc5e09188c7b523333f6b71de3ba57dbf (patch) | |
tree | 0ed119a6910c441124b8c053d0df48c8f1127fad /build2/variable.txx | |
parent | 5fac16471ba789965a72ffbbea406b75d8a680dc (diff) |
Add support for prepend/append in target type/pattern-specific vars
Semantically, these are similar to variable overrides and are essentially
treated as "templates" that are applied on lookup to the "stem" value that is
specific to the target type/name. For example:
x = [string] a
file{f*}: x =+ b
sub/:
{
file{*}: x += c
print $(file{foo}:x) # abc
print $(file{bar}:x) # ac
}
Diffstat (limited to 'build2/variable.txx')
-rw-r--r-- | build2/variable.txx | 36 |
1 files changed, 21 insertions, 15 deletions
diff --git a/build2/variable.txx b/build2/variable.txx index a3511d4..a86a936 100644 --- a/build2/variable.txx +++ b/build2/variable.txx @@ -54,13 +54,15 @@ namespace build2 catch (const invalid_argument&) {} // Fall through. } - diag_record dr (error); + { + diag_record dr (error); - dr << "invalid " << value_traits<T>::value_type.name - << " value '" << ns << "'"; + dr << "invalid " << value_traits<T>::value_type.name + << " value '" << ns << "'"; - if (var != nullptr) - dr << " in variable " << var->name; + if (var != nullptr) + dr << " in variable " << var->name; + } throw failed (); } @@ -84,13 +86,15 @@ namespace build2 catch (const invalid_argument&) {} // Fall through. } - diag_record dr (error); + { + diag_record dr (error); - dr << "invalid " << value_traits<T>::value_type.name - << " value '" << ns << "'"; + dr << "invalid " << value_traits<T>::value_type.name + << " value '" << ns << "'"; - if (var != nullptr) - dr << " in variable " << var->name; + if (var != nullptr) + dr << " in variable " << var->name; + } throw failed (); } @@ -114,13 +118,15 @@ namespace build2 catch (const invalid_argument&) {} // Fall through. } - diag_record dr (error); + { + diag_record dr (error); - dr << "invalid " << value_traits<T>::value_type.name - << " value '" << ns << "'"; + dr << "invalid " << value_traits<T>::value_type.name + << " value '" << ns << "'"; - if (var != nullptr) - dr << " in variable " << var->name; + if (var != nullptr) + dr << " in variable " << var->name; + } throw failed (); } |