summaryrefslogtreecommitdiffstats
path: root/tests/011/macros-2.txr
diff options
context:
space:
mode:
Diffstat (limited to 'tests/011/macros-2.txr')
-rw-r--r--tests/011/macros-2.txr27
1 files changed, 27 insertions, 0 deletions
diff --git a/tests/011/macros-2.txr b/tests/011/macros-2.txr
new file mode 100644
index 00000000..0d63a13b
--- /dev/null
+++ b/tests/011/macros-2.txr
@@ -0,0 +1,27 @@
+@(do
+ (defmacro while ((condition : result) . body)
+ (let ((cblk (gensym "cnt-blk-"))
+ (bblk (gensym "brk-blk-")))
+ '(macrolet ((break (value) '(return-from ,',bblk ,value)))
+ (symacrolet ((break (return-from ,bblk))
+ (continue (return-from ,cblk)))
+ (block ,bblk
+ (for () (,condition ,result) ()
+ (block ,cblk ,*body)))))))
+
+ (let ((i 0))
+ (while ((< i 100))
+ (if (< (inc i) 20)
+ continue)
+ (if (> i 30)
+ break)
+ (prinl i)))
+
+ (prinl
+ (sys:expand
+ '(while ((< i 100))
+ (if (< (inc i) 20)
+ continue)
+ (if (> i 30)
+ break)
+ (prinl i)))))