diff --git a/src/builtin.jq b/src/builtin.jq index d5fa9b99..d3a4bb16 100644 --- a/src/builtin.jq +++ b/src/builtin.jq @@ -168,9 +168,9 @@ def until(cond; next): if cond then . else (next|_until) end; _until; def limit($n; exp): - if $n < 0 then exp - else label $out | foreach exp as $item ($n; .-1; $item, if . <= 0 then break $out else empty end) - end; + if $n > 0 then label $out | foreach exp as $item ($n; .-1; $item, if . <= 0 then break $out else empty end) + elif $n == 0 then empty + else exp end; def isempty(g): 0 == ((label $go | g | (1, break $go)) // 0); def first(g): label $out | g | ., break $out; def last(g): reduce g as $item (null; $item); diff --git a/tests/jq.test b/tests/jq.test index c027f538..f330fb0f 100644 --- a/tests/jq.test +++ b/tests/jq.test @@ -304,6 +304,14 @@ null [11,22,33,44,55,66,77,88,99] [11,22,33] +[limit(0; error)] +"badness" +[] + +[limit(1; 1, error)] +"badness" +[1] + [first(range(.)), last(range(.)), nth(0; range(.)), nth(5; range(.)), try nth(-1; range(.)) catch .] 10 [0,9,0,5,"nth doesn't support negative indices"]