Conditional exprs are not path exprs (fix #1368)
The conditional expression in if-then-elif-else-end cannot contribute to path expressions because it doesn't change the input to any of the then/ elif/else expressions. These must be generated via gen_subexp(). See also #1366.
This commit is contained in:
1 parent
674e9fb7c2
commit
b142d484d5
2 files changed
+6
-1
No files matched your search
+1
-1
@@ -905,7 +905,7 @@ static block gen_wildvar_binding(block var, const char* name, block body) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
block gen_cond(block cond, block iftrue, block iffalse) {
|
block gen_cond(block cond, block iftrue, block iffalse) {
|
||||||
return BLOCK(gen_op_simple(DUP), cond,
|
return BLOCK(gen_op_simple(DUP), BLOCK(gen_subexp(cond), gen_op_simple(POP)),
|
||||||
gen_condbranch(BLOCK(gen_op_simple(POP), iftrue),
|
gen_condbranch(BLOCK(gen_op_simple(POP), iftrue),
|
||||||
BLOCK(gen_op_simple(POP), iffalse)));
|
BLOCK(gen_op_simple(POP), iffalse)));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1382,4 +1382,9 @@ true
|
|||||||
{"a":null,"b":null}
|
{"a":null,"b":null}
|
||||||
{"a":null,"b":"b"}
|
{"a":null,"b":"b"}
|
||||||
|
|
||||||
|
# Regression test for #1368
|
||||||
|
(.. | select(type == "object" and has("b") and (.b | type) == "array")|.b) |= .[0]
|
||||||
|
{"a": {"b": [1, {"b": 3}]}}
|
||||||
|
{"a": {"b": 1}}
|
||||||
|
|
||||||
|
|
||||||
Reference in new issue
Block a user