summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEmanuele Torre <torreemanuele6@gmail.com>2023-08-04 22:52:27 +0200
committerNico Williams <nico@cryptonector.com>2023-08-04 17:38:52 -0500
commitf94a9d463ffb3422861a0da140470dbf5ce76632 (patch)
treeb63b841402177b23758f6ab54a835d34ae716156
parent3b6e7ddd72d6080959a44bdcca068c3a200eb2ef (diff)
Let error(null) throw null
This patch removes the weird behaviour of jv_invalid_with_msg(jv_null()) that returns jv_invalid() (i.e. empty), instead of a boxed jv_null(). The previous behaviour of null|error was obviously unintentional, and allowing is jv_invalid_with_msg() to return values on which you can't call jv_invalid_get_msg() is only error prone.
-rw-r--r--docs/content/manual/manual.yml4
-rw-r--r--jq.1.prebuilt3
-rw-r--r--src/jv.c2
-rw-r--r--tests/jq.test10
4 files changed, 4 insertions, 15 deletions
diff --git a/docs/content/manual/manual.yml b/docs/content/manual/manual.yml
index 3e2c289d..4028a943 100644
--- a/docs/content/manual/manual.yml
+++ b/docs/content/manual/manual.yml
@@ -1231,10 +1231,6 @@ sections:
given as the argument. Errors can be caught with try/catch;
see below.
- When the error value is `null`, it produces nothing and works
- just like `empty`. So `[null | error]` and `[error(null)]` both
- emit `[]`.
-
examples:
- program: 'try error catch .'
input: '"error message"'
diff --git a/jq.1.prebuilt b/jq.1.prebuilt
index b2590acc..48b76220 100644
--- a/jq.1.prebuilt
+++ b/jq.1.prebuilt
@@ -1263,9 +1263,6 @@ jq \'[1,2,empty,3]\'
.SS "error, error(message)"
Produces an error with the input value, or with the message given as the argument\. Errors can be caught with try/catch; see below\.
.
-.P
-When the error value is \fBnull\fR, it produces nothing and works just like \fBempty\fR\. So \fB[null | error]\fR and \fB[error(null)]\fR both emit \fB[]\fR\.
-.
.IP "" 4
.
.nf
diff --git a/src/jv.c b/src/jv.c
index 933ed7be..cd2c1ac1 100644
--- a/src/jv.c
+++ b/src/jv.c
@@ -147,8 +147,6 @@ typedef struct {
} jvp_invalid;
jv jv_invalid_with_msg(jv err) {
- if (JVP_HAS_KIND(err, JV_KIND_NULL))
- return JV_INVALID;
jvp_invalid* i = jv_mem_alloc(sizeof(jvp_invalid));
i->refcnt = JV_REFCNT_INIT;
i->errmsg = err;
diff --git a/tests/jq.test b/tests/jq.test
index 3ba29add..94dec3fb 100644
--- a/tests/jq.test
+++ b/tests/jq.test
@@ -1270,13 +1270,11 @@ null
[null,true,{"a":1}]
[]
-[1,error,2]
+.[] | try error catch .
+[1,null,2]
+1
null
-[1,2]
-
-[1,error(null),2]
-0
-[1,2]
+2
try error("\($__loc__)") catch .
null