summaryrefslogtreecommitdiffstats
path: root/share
diff options
context:
space:
mode:
Diffstat (limited to 'share')
-rw-r--r--share/txr/stdlib/yield.tl8
1 files changed, 8 insertions, 0 deletions
diff --git a/share/txr/stdlib/yield.tl b/share/txr/stdlib/yield.tl
index 236faaa8..3b58ace2 100644
--- a/share/txr/stdlib/yield.tl
+++ b/share/txr/stdlib/yield.tl
@@ -64,3 +64,11 @@
(defmacro yield (form)
^(yield-from nil ,form))
+
+(defmacro suspend (:form form name var . body)
+ (with-gensyms (cap val)
+ ^(tree-bind (,cap . ,val) (sys:capture-cont ',name ',form)
+ (if ,cap
+ (let ((,var ,val))
+ (sys:abscond-from ,name ,*body))
+ ,val))))