]> granicus.if.org Git - jq/commitdiff
Make `while()` handle `break`
authorNicolas Williams <nico@cryptonector.com>
Wed, 9 Jul 2014 05:39:25 +0000 (00:39 -0500)
committerNicolas Williams <nico@cryptonector.com>
Wed, 9 Jul 2014 05:39:25 +0000 (00:39 -0500)
builtin.c
tests/all.test

index 219133a4ba84ec508a9027ae58d40abeeb57a88c..6d53a58286147804fe8b88ad8c4e35d8ff335144 100644 (file)
--- a/builtin.c
+++ b/builtin.c
@@ -984,7 +984,7 @@ static const char* const jq_builtins[] = {
   "def while(cond; update): "
   "     def _while: "
   "         if cond then ., (update | _while) else empty end; "
-  "     _while;",
+  "     try _while catch if .==\"break\" then empty else . end;",
   "def limit(n; exp): if n < 0 then exp else foreach exp as $item ([n, null]; if .[0] < 1 then break else [.[0] -1, $item] end; .[1]) end;",
 };
 #undef LIBM_DD
index 1175f1a6ac0423458d479ec915cbf395f6e90089..55cb3891e0d64e9bf003a80cc6dbd9485363a34e 100644 (file)
@@ -226,6 +226,10 @@ null
 1
 [1,2,4,8,16,32,64]
 
+[while(.<100; .*2|if . > 10 then break else . end)]
+1
+[1,2,4,8]
+
 [foreach .[] as $item ([3, null]; if .[0] < 1 then break else [.[0] -1, $item] end; .[1])]
 [11,22,33,44,55,66,77,88,99]
 [11,22,33]