summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNicolas Williams <nico@cryptonector.com>2017-02-21 18:11:35 -0600
committerNicolas Williams <nico@cryptonector.com>2017-02-21 18:11:35 -0600
commit8cde3280074f273a379dd3ea9d3fafc10918ee70 (patch)
tree953fef28185f2d486fbc86b8dd4e651e57f6d90c
parent02bad4b298d4d2bc8e29c3f0d744700652cfd832 (diff)
Allow var bindings in path expressions (#1347)
The expression in a variable binding is not and must not be seen as being part of a path expression in which the variable binding appears.
-rw-r--r--src/compile.c2
-rw-r--r--tests/jq.test6
2 files changed, 7 insertions, 1 deletions
diff --git a/src/compile.c b/src/compile.c
index 44479e37..849e2f1d 100644
--- a/src/compile.c
+++ b/src/compile.c
@@ -893,7 +893,7 @@ block gen_destructure(block var, block matcher, block body) {
if (body.first && body.first->op == TOP)
top = inst_block(block_take(&body));
- return BLOCK(top, gen_op_simple(DUP), var, bind_matcher(matcher, body));
+ return BLOCK(top, gen_op_simple(DUP), gen_subexp(var), gen_op_simple(POP), bind_matcher(matcher, body));
}
// Like gen_var_binding(), but bind `break`'s wildcard unbound variable
diff --git a/tests/jq.test b/tests/jq.test
index f510a917..47b842c4 100644
--- a/tests/jq.test
+++ b/tests/jq.test
@@ -1356,3 +1356,9 @@ IN(range(5;20); range(10))
null
true
+# Regression test for #1347
+(.a as $x | .b) = "b"
+{"a":null,"b":null}
+{"a":null,"b":"b"}
+
+