Remove dead get_char parameters in binary_reader

The non-recursive rewrite of the binary readers (#5505, #5506, #5507)
left parse_cbor_internal()'s and parse_ubjson_internal()'s get_char
parameters dead: parse_cbor_internal() has one caller and it always
passes true, and parse_ubjson_internal() has one caller and it always
uses the true default. Both parameters, and the @param docs describing
the "reuse the last character" mode they used to select, no longer
correspond to anything.

Drop both parameters, initialise fetch/prefix unconditionally, and
update the two call sites in sax_parse(). parse_cbor_value()'s and
get_ubjson_string()'s own get_char parameters are unrelated and are
left alone; both still have a false caller.

Also delete a stray `@return whether a valid MessagePack value was
passed to the SAX parser` doxygen block that sits directly above
parse_msgpack_value()'s real doc comment, a leftover of the same
rewrite.

Behavior, the public API and the ABI are unchanged; these are private
members of detail::binary_reader. Verified by compiling with
-Wunused-parameter and running unit-cbor, unit-ubjson, unit-bjdata and
unit-msgpack (offline, against the stubbed test_data.hpp).

Part of #5711

Signed-off-by: Niels Lohmann <mail@nlohmann.me>
This commit is contained in:
Niels Lohmann
2026-09-30 10:19:56 +02:00
parent 0ffe9ab4a8
commit a3a94bb7eb
2 changed files with 10 additions and 32 deletions
@@ -148,7 +148,7 @@ class binary_reader
break; break;
case input_format_t::cbor: case input_format_t::cbor:
result = parse_cbor_internal(true, tag_handler); result = parse_cbor_internal(tag_handler);
break; break;
case input_format_t::msgpack: case input_format_t::msgpack:
@@ -1571,19 +1571,15 @@ class binary_reader
enclosing container after each element, so that the nesting depth of the enclosing container after each element, so that the nesting depth of the
input costs heap rather than native stack (see #5104). input costs heap rather than native stack (see #5104).
@param[in] get_char whether a new character should be retrieved from the
input (true) or whether the last read character
@a current should be considered instead
@param[in] tag_handler how CBOR tags should be treated @param[in] tag_handler how CBOR tags should be treated
@return whether reading the value succeeded @return whether reading the value succeeded
*/ */
bool parse_cbor_internal(const bool get_char, bool parse_cbor_internal(const cbor_tag_handler_t tag_handler)
const cbor_tag_handler_t tag_handler)
{ {
// whether the next value starts at a fresh byte or at the one already // whether the next value starts at a fresh byte or at the one already
// read into `current` // read into `current`
bool fetch = get_char; bool fetch = true;
// the key currently being read; hoisted out of the loop so that its // the key currently being read; hoisted out of the loop so that its
// capacity is reused across elements and across nesting levels // capacity is reused across elements and across nesting levels
@@ -1676,9 +1672,6 @@ class binary_reader
// MsgPack // // MsgPack //
///////////// /////////////
/*!
@return whether a valid MessagePack value was passed to the SAX parser
*/
/*! /*!
@brief read one MessagePack value @brief read one MessagePack value
@@ -2423,20 +2416,16 @@ class binary_reader
//////////// ////////////
/*! /*!
@param[in] get_char whether a new character should be retrieved from the
input (true, default) or whether the last read
character should be considered instead
@return whether a valid UBJSON value was passed to the SAX parser @return whether a valid UBJSON value was passed to the SAX parser
*/ */
bool parse_ubjson_internal(const bool get_char = true) bool parse_ubjson_internal()
{ {
// the key currently being read; hoisted out of the loop so that its // the key currently being read; hoisted out of the loop so that its
// capacity is reused across elements and across nesting levels // capacity is reused across elements and across nesting levels
string_t key; string_t key;
// the type marker of the value to read next // the type marker of the value to read next
char_int_type prefix = get_char ? get_ignore_noop() : current; char_int_type prefix = get_ignore_noop();
while (true) while (true)
{ {
+5 -16
View File
@@ -12915,7 +12915,7 @@ class binary_reader
break; break;
case input_format_t::cbor: case input_format_t::cbor:
result = parse_cbor_internal(true, tag_handler); result = parse_cbor_internal(tag_handler);
break; break;
case input_format_t::msgpack: case input_format_t::msgpack:
@@ -14338,19 +14338,15 @@ class binary_reader
enclosing container after each element, so that the nesting depth of the enclosing container after each element, so that the nesting depth of the
input costs heap rather than native stack (see #5104). input costs heap rather than native stack (see #5104).
@param[in] get_char whether a new character should be retrieved from the
input (true) or whether the last read character
@a current should be considered instead
@param[in] tag_handler how CBOR tags should be treated @param[in] tag_handler how CBOR tags should be treated
@return whether reading the value succeeded @return whether reading the value succeeded
*/ */
bool parse_cbor_internal(const bool get_char, bool parse_cbor_internal(const cbor_tag_handler_t tag_handler)
const cbor_tag_handler_t tag_handler)
{ {
// whether the next value starts at a fresh byte or at the one already // whether the next value starts at a fresh byte or at the one already
// read into `current` // read into `current`
bool fetch = get_char; bool fetch = true;
// the key currently being read; hoisted out of the loop so that its // the key currently being read; hoisted out of the loop so that its
// capacity is reused across elements and across nesting levels // capacity is reused across elements and across nesting levels
@@ -14443,9 +14439,6 @@ class binary_reader
// MsgPack // // MsgPack //
///////////// /////////////
/*!
@return whether a valid MessagePack value was passed to the SAX parser
*/
/*! /*!
@brief read one MessagePack value @brief read one MessagePack value
@@ -15190,20 +15183,16 @@ class binary_reader
//////////// ////////////
/*! /*!
@param[in] get_char whether a new character should be retrieved from the
input (true, default) or whether the last read
character should be considered instead
@return whether a valid UBJSON value was passed to the SAX parser @return whether a valid UBJSON value was passed to the SAX parser
*/ */
bool parse_ubjson_internal(const bool get_char = true) bool parse_ubjson_internal()
{ {
// the key currently being read; hoisted out of the loop so that its // the key currently being read; hoisted out of the loop so that its
// capacity is reused across elements and across nesting levels // capacity is reused across elements and across nesting levels
string_t key; string_t key;
// the type marker of the value to read next // the type marker of the value to read next
char_int_type prefix = get_char ? get_ignore_noop() : current; char_int_type prefix = get_ignore_noop();
while (true) while (true)
{ {