From adc9a34ee759e31dc1f7f9b98629042be3819815 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Wed, 7 Feb 2024 13:22:59 +0200 Subject: Use reverse to fundamental types semantics in $json.member_value() Feels like this is an equivalent context to subscript/iteration. --- libbuild2/functions-json.cxx | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) (limited to 'libbuild2/functions-json.cxx') diff --git a/libbuild2/functions-json.cxx b/libbuild2/functions-json.cxx index 7551fa1..d7265ba 100644 --- a/libbuild2/functions-json.cxx +++ b/libbuild2/functions-json.cxx @@ -70,7 +70,29 @@ namespace build2 // for details). // if (v.type == json_type::object && v.object.size () == 1) - return move (v.object.front ().value); + { + // Reverse simple JSON values to the corresponding fundamental type + // values for consistency with subscript/iteration (see + // json_subscript_impl() for background). + // + json_value& jr (v.object.front ().value); + + switch (jr.type) + { +#if 0 + case json_type::null: return value (names {}); +#else + case json_type::null: return value (); +#endif + case json_type::boolean: return value (jr.boolean); + case json_type::signed_number: return value (jr.signed_number); + case json_type::unsigned_number: + case json_type::hexadecimal_number: return value (jr.unsigned_number); + case json_type::string: return value (move (jr.string)); + case json_type::array: + case json_type::object: return value (move (jr)); + } + } fail << "json object member expected instead of " << v.type << endf; }; -- cgit v1.1