From 4698694e37920d13409e8394237a4b0d0d25b254 Mon Sep 17 00:00:00 2001 From: David Fetter Date: Mon, 6 May 2024 18:14:35 -0700 Subject: [PATCH] Make tonumber work on `true` and `false` #3112 --- src/builtin.c | 6 ++++++ tests/jq.test | 4 ++-- tests/man.test | 4 ++-- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/builtin.c b/src/builtin.c index ebc1863d47..92d7b814bf 100644 --- a/src/builtin.c +++ b/src/builtin.c @@ -483,6 +483,12 @@ static jv f_tonumber(jq_state *jq, jv input) { jv_free(input); return number; } + if (jv_get_kind(input) == JV_KIND_FALSE) { + return jv_number(0); + } + if (jv_get_kind(input) == JV_KIND_TRUE) { + return jv_number(1); + } return type_error(input, "cannot be parsed as a number"); } diff --git a/tests/jq.test b/tests/jq.test index bde6c0a33c..c0d40829a9 100644 --- a/tests/jq.test +++ b/tests/jq.test @@ -2038,8 +2038,8 @@ null 2 .[] |= try tonumber -["1", "2a", "3", " 4 ", "5.67", ".89", "-876", "+5.43", 21] -[1, 3, 5.67, 0.89, -876, 5.43, 21] +["1", "2a", "3", " 4 ", "5.67", ".89", "-876", "+5.43", 21, true, false] +[1, 3, 5.67, 0.89, -876, 5.43, 21, 1, 0] # Also 1859, but from 2073 any(keys[]|tostring?;true) diff --git a/tests/man.test b/tests/man.test index 31ae3bf2f5..9cdea27c31 100644 --- a/tests/man.test +++ b/tests/man.test @@ -814,8 +814,8 @@ true [null, 1] [.[] | tonumber?] -["1", "invalid", "3", 4] -[1, 3, 4] +["1", "invalid", "3", 4, true, false] +[1, 3, 4, 1, 0] .bar as $x | .foo | . + $x {"foo":10, "bar":200}