aboutsummaryrefslogtreecommitdiff
path: root/libbuild2/functions-project-name.cxx
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2022-12-14 08:03:32 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2022-12-14 08:03:32 +0200
commit218a739b33325c5dd6baa5cf6291dad849ad2441 (patch)
tree754661d712d80d87c1c113cb7bfd6ec542e5858b /libbuild2/functions-project-name.cxx
parent6d892e32a83908406a6f2fc6d47dd4a8b131fc60 (diff)
Handle NULL values in $string() and $concat() functions
This is relied upon by the parser to provide conversion/concatenation semantics consistent with untyped values. Note that we handle NULL values only for types that have empty representation.
Diffstat (limited to 'libbuild2/functions-project-name.cxx')
-rw-r--r--libbuild2/functions-project-name.cxx13
1 files changed, 12 insertions, 1 deletions
diff --git a/libbuild2/functions-project-name.cxx b/libbuild2/functions-project-name.cxx
index 145e62c..4a8394d 100644
--- a/libbuild2/functions-project-name.cxx
+++ b/libbuild2/functions-project-name.cxx
@@ -13,7 +13,13 @@ namespace build2
{
function_family f (m, "project_name");
- f["string"] += [](project_name p) {return move (p).string ();};
+ // Note that we must handle NULL values (relied upon by the parser
+ // to provide conversion semantics consistent with untyped values).
+ //
+ f["string"] += [](project_name* p)
+ {
+ return p != nullptr ? move (*p).string () : string ();
+ };
f["base"] += [](project_name p, optional<string> ext)
{
@@ -32,6 +38,11 @@ namespace build2
//
function_family b (m, "builtin");
+ // Note that while we should normally handle NULL values (relied upon by
+ // the parser to provide concatenation semantics consistent with untyped
+ // values), the result will unlikely be what the user expected. So for now
+ // we keep it a bit tighter.
+ //
b[".concat"] += [](project_name n, string s)
{
string r (move (n).string ());