Fix destructuring alternation
Attempting to use the existing FORK_OPT opcode resulted in difficulty knowing when to pop an error message off the stack and when not to. This commit makes DESTRUCTURE_ALT a real opcode that is identical to FORK_OPT, except for never pushing the error message onto the stack when continuing from an error backtrack. Some small changes were necessary to the DUP/POP behavior surrounding destructuring to accomodate this.
This commit is contained in:
1 parent
3dc5f4e948
commit
0673dee1b3
4 files changed
+122
-21
No files matched your search
+101
@@ -726,6 +726,107 @@ null
|
||||
[4, 5, null, null, 7, null]
|
||||
[null, null, null, null, null, "foo"]
|
||||
|
||||
# Destructuring DUP/POP issues
|
||||
.[] | . as {a:$a} ?// {a:$a} ?// {a:$a} | $a
|
||||
[[3],[4],[5],6]
|
||||
# Runtime error: "jq: Cannot index array with string \"c\""
|
||||
|
||||
.[] as {a:$a} ?// {a:$a} ?// {a:$a} | $a
|
||||
[[3],[4],[5],6]
|
||||
# Runtime error: "jq: Cannot index array with string \"c\""
|
||||
|
||||
[[3],[4],[5],6][] | . as {a:$a} ?// {a:$a} ?// {a:$a} | $a
|
||||
null
|
||||
# Runtime error: "jq: Cannot index array with string \"c\""
|
||||
|
||||
[[3],[4],[5],6] | .[] as {a:$a} ?// {a:$a} ?// {a:$a} | $a
|
||||
null
|
||||
# Runtime error: "jq: Cannot index array with string \"c\""
|
||||
|
||||
.[] | . as {a:$a} ?// {a:$a} ?// $a | $a
|
||||
[[3],[4],[5],6]
|
||||
[3]
|
||||
[4]
|
||||
[5]
|
||||
6
|
||||
|
||||
.[] as {a:$a} ?// {a:$a} ?// $a | $a
|
||||
[[3],[4],[5],6]
|
||||
[3]
|
||||
[4]
|
||||
[5]
|
||||
6
|
||||
|
||||
[[3],[4],[5],6][] | . as {a:$a} ?// {a:$a} ?// $a | $a
|
||||
null
|
||||
[3]
|
||||
[4]
|
||||
[5]
|
||||
6
|
||||
|
||||
[[3],[4],[5],6] | .[] as {a:$a} ?// {a:$a} ?// $a | $a
|
||||
null
|
||||
[3]
|
||||
[4]
|
||||
[5]
|
||||
6
|
||||
|
||||
.[] | . as {a:$a} ?// $a ?// {a:$a} | $a
|
||||
[[3],[4],[5],6]
|
||||
[3]
|
||||
[4]
|
||||
[5]
|
||||
6
|
||||
|
||||
.[] as {a:$a} ?// $a ?// {a:$a} | $a
|
||||
[[3],[4],[5],6]
|
||||
[3]
|
||||
[4]
|
||||
[5]
|
||||
6
|
||||
|
||||
[[3],[4],[5],6][] | . as {a:$a} ?// $a ?// {a:$a} | $a
|
||||
null
|
||||
[3]
|
||||
[4]
|
||||
[5]
|
||||
6
|
||||
|
||||
[[3],[4],[5],6] | .[] as {a:$a} ?// $a ?// {a:$a} | $a
|
||||
null
|
||||
[3]
|
||||
[4]
|
||||
[5]
|
||||
6
|
||||
|
||||
.[] | . as $a ?// {a:$a} ?// {a:$a} | $a
|
||||
[[3],[4],[5],6]
|
||||
[3]
|
||||
[4]
|
||||
[5]
|
||||
6
|
||||
|
||||
.[] as $a ?// {a:$a} ?// {a:$a} | $a
|
||||
[[3],[4],[5],6]
|
||||
[3]
|
||||
[4]
|
||||
[5]
|
||||
6
|
||||
|
||||
[[3],[4],[5],6][] | . as $a ?// {a:$a} ?// {a:$a} | $a
|
||||
null
|
||||
[3]
|
||||
[4]
|
||||
[5]
|
||||
6
|
||||
|
||||
[[3],[4],[5],6] | .[] as $a ?// {a:$a} ?// {a:$a} | $a
|
||||
null
|
||||
[3]
|
||||
[4]
|
||||
[5]
|
||||
6
|
||||
|
||||
. as $dot|any($dot[];not)
|
||||
[1,2,3,4,true,false,1,2,3,4,5]
|
||||
true
|
||||
|
||||
Reference in new issue
Block a user