diff options
Diffstat (limited to 'share')
-rw-r--r-- | share/txr/stdlib/yield.tl | 8 |
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)))) |