ircd::lex: Handle js null as falsy boolean.

This commit is contained in:
Jason Volk 2022-10-08 10:49:41 -07:00
parent 4c44125d37
commit a9b22c9052
1 changed files with 6 additions and 4 deletions

View File

@ -219,14 +219,15 @@ ircd::lex_cast(bool i,
template<> bool
ircd::lex_cast(const string_view &s)
{
const bool literal[2]
const bool literal[]
{
s == "true",
s == "false",
s == "null",
};
// Handle the common cases early in this frame before call.
if(likely(literal[0] | literal[1]))
if(likely(literal[0] | literal[1] | literal[2]))
return literal[0];
return lex::cast<bool, lex::to_bool>(s);
@ -236,14 +237,15 @@ template<> bool
ircd::lex_castable<bool>(const string_view &s)
noexcept
{
const bool literal[2]
const bool literal[]
{
s == "true",
s == "false",
s == "null",
};
// Handle the common cases early in this frame before call.
if(likely(literal[0] | literal[1]))
if(likely(literal[0] | literal[1] | literal[2]))
return true;
return lex::test<bool, lex::is_bool>(s);