aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--cppawk-include/iter.h6
-rw-r--r--testcases-iter37
2 files changed, 43 insertions, 0 deletions
diff --git a/cppawk-include/iter.h b/cppawk-include/iter.h
index 9e48c7e..72f8acb 100644
--- a/cppawk-include/iter.h
+++ b/cppawk-include/iter.h
@@ -256,4 +256,10 @@ function __loop_argmin(a, arga, b, argb)
#define __step_lockstep(...) prog(__varexpand3(__step_first, __step_next, \
__VA_ARGS__))
+#define __init_if(test, clause) __init_ ## clause
+#define __test_if(test, clause) !(test) || __test_ ## clause
+#define __prep_if(test, clause) (test) && __prep_ ## clause
+#define __fini_if(test, clause) __fini_ ## clause
+#define __step_if(test, clause) (test) && __step_ ## clause
+
#endif
diff --git a/testcases-iter b/testcases-iter
index 629420e..223ca4c 100644
--- a/testcases-iter
+++ b/testcases-iter
@@ -368,3 +368,40 @@ BEGIN {
("a" nil)
(nil "a")
("a" "b" "c")
+--
+17:
+$cppawk '
+#include <iter.h>
+
+BEGIN {
+ loop (range (i, 1, 10),
+ if (i % 2 == 0, collect(l, i)))
+ { }
+
+ print sexp(l)
+}'
+:
+(2 4 6 8 10)
+--
+18:
+$cppawk '
+#include <iter.h>
+
+BEGIN {
+ loop (range (i, 1, 10),
+ if (i % 2 == 1, from(j, 1)))
+ {
+ print i, j
+ }
+}'
+:
+1 1
+2 1
+3 2
+4 2
+5 3
+6 3
+7 4
+8 4
+9 5
+10 5