summaryrefslogtreecommitdiffstats
path: root/builtin.c
diff options
context:
space:
mode:
authorDavid Tolnay <dtolnay@gmail.com>2015-08-06 23:04:47 -0700
committerDavid Tolnay <dtolnay@gmail.com>2015-08-06 23:05:03 -0700
commita47b32999b8a6a754b91909548700efdad3c2dd9 (patch)
tree1b48e4f064c19c1c94093447fd9ed6475922add0 /builtin.c
parentd66fbd218bfccf83b42448febd4f255883d726a5 (diff)
Fix range(value;stream) (fix #886)
Diffstat (limited to 'builtin.c')
-rw-r--r--builtin.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/builtin.c b/builtin.c
index 52f469d9..2fa498bb 100644
--- a/builtin.c
+++ b/builtin.c
@@ -1339,9 +1339,15 @@ static block bind_bytecoded_builtins(block b) {
{
// Note that we can now define `range` as a jq-coded function
block rangevar = gen_op_var_fresh(STOREV, "rangevar");
- block init = BLOCK(gen_op_simple(DUP), gen_call("start", gen_noop()), rangevar);
- block range = BLOCK(init,
+ block rangestart = gen_op_var_fresh(STOREV, "rangestart");
+ block range = BLOCK(gen_op_simple(DUP),
+ gen_call("start", gen_noop()),
+ rangestart,
gen_call("end", gen_noop()),
+ gen_op_simple(DUP),
+ gen_op_bound(LOADV, rangestart),
+ // Reset rangevar for every value generated by "end"
+ rangevar,
gen_op_bound(RANGE, rangevar));
builtins = BLOCK(builtins, gen_function("range",
BLOCK(gen_param("start"), gen_param("end")),